有一个与文本框关联的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>
答案 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">
希望它有所帮助。