rich:suggestionBox,带有JavaScript中的suggestionAction

rich:suggestionBox,带有JavaScript中的suggestionAction,javascript,jsf,richfaces,seam2,Javascript,Jsf,Richfaces,Seam2,我有一个输入。它与bean中的suggestionAction配合得非常好。但是我想用JavaScript实现这个suggestionAction 以下是我的密码: 有没有一种方法可以在不每次调用服务器的情况下从JavaScript调用该方法?我看不出这有多有用。使用JavaScript时,您还需要每次点击服务器才能获得建议。或者,在呈现HTML时,是否希望将所有可能的建议转换为JavaScript?我也不认为它有什么用处,因为您的HTML响应可能会增长到1MB或更多。顺便说一下,这里有一个潜在

我有一个输入。它与bean中的suggestionAction配合得非常好。但是我想用JavaScript实现这个suggestionAction

以下是我的密码:


有没有一种方法可以在不每次调用服务器的情况下从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();   
}