JSF rich:suggestionbox需要通过排除已选择的项目来过滤建议列表

时间:2013-01-24 14:10:41

标签: jsf richfaces

有一个与文本框关联的jsf建议框。一切正常,但我无法排除已经选择的结果。关联的文本框包含逗号分隔值。我没有找到任何方法可以显示建议,不包括文本框中已有的建议。我可以将文本框值与建议ajax请求或任何其他想法一起传递吗?

public class ActionBean {

private String contacts;

public List<Contact> autocomplete(Object suggest) {

//....
// logic to get the list from DB based on suggestion but no data about existing selected values
//....

}
}

JSF的文本框和建议框的xhtml部分

<h:inputText value="#{actionBean.contacts}" styleClass="input mFields" id="text">
    <a4j:support event="onchange" action="#{someaction...}" return;" reRender="..."/>
</h:inputText>

<h:outputLabel value="Search and Select Name/Number or Enter Number. Use , for multiple entries"/>
    <rich:suggestionbox limitToList="true" id="suggestionBoxId" for="text" tokens=",[]" suggestionAction="#{actionBean.autocomplete}" var="result" fetchValue="#{result.number}" height="100" width="200" nothingLabel="No contacts found" columnClasses="center" usingSuggestObjects="true" >
        <h:column>
            <h:outputText value="#{result.name} #{result.lastName}" />
        </h:column>
        <h:column>
            <h:outputText value="#{result.number}" style="font-style:italic" />
        </h:column>
    </rich:suggestionbox>

2 个答案:

答案 0 :(得分:0)

您必须将所选值传递给服务器才能将其排除。也许你可以做一些JavaScript破解,但它不会更清晰(参见usingSuggestObjects和onobjectchange)。

答案 1 :(得分:0)

@Chris感谢您的回复。

我终于找到了方法,即正在使用的bean被设置为请求范围,所以即使通过javasript调用onchange事件也是为每个bean的每个请求创建方法调用。在上面的例子中,suggestionbox每次调用一个新对象,而inputtext上的onchange也每次调用一个新对象。

我提出的解决方案是将bean范围设置为'view',以便对于该视图,bean对象保持不变,因此所有请求都可以共享状态。然后在suggestionbox的onsubmit事件中调用inputtext的onchange事件,该事件用输入文本中的最新值更新bean字段。

<rich:suggestionbox limitToList="true" id="suggestionBoxId" for="text" tokens=",[]" suggestionAction="#{actionBean.autocomplete}" var="result" fetchValue="#{result.number}" height="100" width="200" nothingLabel="No contacts found" columnClasses="center" usingSuggestObjects="true" onsubmite="call onchange event on inputext field">

希望它有所帮助。