2015-11-02 48 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>