2015-11-02 49 views
0

我們遇到以下問題。我們正在從Richfaces遷移到Primefaces。下面是從RichFaces的實現代碼:將Richfaces建議箱遷移到Primefaces自動完成

<h:panelGrid 
    columns="3" 
    cellspacing="0" 
    cellpadding="0"> 
    <h:inputText 
    id="inpID" 
    converter="inpConverter" 
    value="#{session.a}" 
    valueChangeListener="#{session.sthChanged}" 
    onfocus="someFunctionA();" 
    onblur="someFunctionB();" /> 

    <h:commandLink 
    action="#{session.redirectToSite()}" 
    styleClass="targetButton align-middle" /> 

    <rich:suggestionbox 
    id="inpSuggest" 
    for="inpID" 
    frequency="1" 
    minChars="0" 
    var="result" 
    status="noStatus" 
    fetchValue="#{result}" 
    suggestionAction="#{manager.autocomplete}"> 
    <a4j:ajax 
     event="select" 
     listener="#{session.setSthAndRedirect(result)}" 
     execute="@this" /> 
    <f:facet name="nothingLabel"> 
     <h:outputText value="No match found!" /> 
    </f:facet> 
    <h:column> 
     <h:outputText value="#{result.x}" /> 
    </h:column> 
    </rich:suggestionbox> 
</h:panelGrid> 

到現在爲止我已經中Primefaces如下:

<h:panelGrid 
    columns="3" 
    cellspacing="0" 
    cellpadding="0"> 
    <h:inputText 
    id="inpID" 
    converter="inpConverter" 
    value="#{session.a}" 
    valueChangeListener="#{session.sthChanged}" 
    onfocus="someFunctionA();" 
    onblur="someFunctionB();" /> 

    <h:commandLink 
    action="#{session.redirectToSite()}" 
    styleClass="targetButton align-middle" /> 

    <p:autoComplete 
    id="inpSuggest" 
    placeholder="#{session.a}" 
    completeMethod="#{manager.autocomplete}" 
    var="result" 
    itemValue="#{result}" 
    queryDelay="4000" 
    emptyMessage="No match found!" 
    converter="inpConverter"> 
    <p:ajax 
     event="itemSelect" 
     listener="#{session.setSthAndRedirect}" /> 
    <p:column> 
     <h:outputText value="#{result.x}" /> 
    </p:column> 
    <s:convertEntity /> 
    </p:autoComplete> 
</h:panelGrid> 

現在,這裏是問題。 Richfaces有一個很好的功能。屬性'for'將嵌套的建議框嵌入到h:inputText中。我怎樣才能對Primefaces做同樣的事情? 因爲這兩個組件都在其工作上(即建議和重定向工作以及將某些內容輸入到h:inputText並按下回車鍵),但我沒有找到將它們嵌套到Richfaces中的方法。

使用Primefaces中的自動完成功能時,通過輸入的輸入進行的選擇不起作用,例如: 用戶在1秒鐘內輸入某些內容並希望按下回車鍵 - >這不可能以及我們想實現的目標。

任何幫助,高度讚賞。

此致

回答

0

我找到了解決方案(經由JS和p:remoteCommand):

<p:autoComplete 
    [...] 
    onkeyup="doSomething(event);" 
    [...] > 
    [...] 
</p:autoComplete> 

<p:remoteCommand 
    name="doRemote" 
    immediate="true" 
    actionListener="#{session.doIt}" 
    style="display: none;" /> 

<script type="text/javascript"> 
    function doSomething(e) { 
    var val = document.getElementById("someId"); 
    e = e || window.event; 
    if(e.keyCode == 13) { 
     doRemote([{name:'enteredValue', value:val.value}]); 
     return false; 
    } else { 
     return true; 
    } 
    } 
</script>