rich:suggestionBox,带有JavaScript中的suggestionAction
我有一个输入。它与bean中的suggestionAction配合得非常好。但是我想用JavaScript实现这个suggestionAction 以下是我的密码:rich:suggestionBox,带有JavaScript中的suggestionAction,javascript,jsf,richfaces,seam2,Javascript,Jsf,Richfaces,Seam2,我有一个输入。它与bean中的suggestionAction配合得非常好。但是我想用JavaScript实现这个suggestionAction 以下是我的密码: 有没有一种方法可以在不每次调用服务器的情况下从JavaScript调用该方法?我看不出这有多有用。使用JavaScript时,您还需要每次点击服务器才能获得建议。或者,在呈现HTML时,是否希望将所有可能的建议转换为JavaScript?我也不认为它有什么用处,因为您的HTML响应可能会增长到1MB或更多。顺便说一下,这里有一个潜在
有没有一种方法可以在不每次调用服务器的情况下从JavaScript调用该方法?我看不出这有多有用。使用JavaScript时,您还需要每次点击服务器才能获得建议。或者,在呈现HTML时,是否希望将所有可能的建议转换为JavaScript?我也不认为它有什么用处,因为您的HTML响应可能会增长到1MB或更多。顺便说一下,这里有一个潜在的SQL注入漏洞。使用参数化查询。使用实际方法每次我在输入中添加字符时,sql查询将启动并调用服务器。因此,建议的解决方案是在页面加载中只检索列表一次,然后使用javascript方法suggestionAction进行过滤
<h:inputText id="etabinput" />
<rich:suggestionbox height="200" width="200"
suggestionAction="#{etablissementList.autoComplete}" var="etab"
for="etabinput" fetchValue="#{etab.id} #{etab.nom}" id="suggestion" tokens=",">
<h:column>
<h:outputText value="#{etab.type}" />
</h:column>
<h:column>
<h:outputText value="#{etab.localite}" />
</h:column>
<a:support ajaxSingle="true" event="onselect">
<f:setPropertyActionListener value="#{etab}" target="#{offreHome.instance.etablissement}"/>
</a:support>
</rich:suggestionbox>
public List<Etablissement> autoComplete(Object o) {
String sql = this.getEjbql() + " where lower(etablissement.localite) like concat(lower('"+o.toString()+"'),'%')";
return this.getEntityManager().createQuery(sql).getResultList();
}