我们如何将有效的事件处理程序附加到rich:select with enableManualInput =" true"?

时间:2015-04-23 11:44:49

标签: javascript jsf richfaces

我的要求是:

  1. 我们需要在输入字段中键入值后触发事件 <rich:select>
  2. 有条件是输入值不在select中 list(rich select userLoginBean.userList)但它在backbean中 实体对象但不显示在富选中。
  3. 我只想传递在rich中输入的值:select in backing bean,以便它可以在Entity bean中检查和验证值, 到目前为止,我实现了这个目标,

    <rich:select id="user"
                 value="#{userLoginBean.user}"
                 required="true"
                 listWidth="385px"
                 enableManualInput="true"
                 defaultLabel="Please Enter">
    
        <f:selectItems value="#{userLoginBean.userList}"
                       var="c"
                       itemValue="#{c.userid}"
                       itemLabel="#{not empty c.name? c.name.concat(','):c.name}#{not empty c.alias? c.alias.concat(','):c.alias}#{c.userid}"/>
    
        <a4j:ajax event="keyup" oncomplete="if (event.keyCode == 13) {callToJs((#{rich:component('user')}.getValue())); }" />
        <a4j:jsFunction name="callToJs"  actionListener="#{userLoginBean.searchUserList}" >
            <a4j:param name="value" assignTo="#{bean.searchValue}" />
        </a4j:jsFunction>
    </rich:select>
    

    但JavaScript函数callToJs()在支持bean代码中没有获取值:

    <a4j:ajax event="keyup"
              oncomplete="if (event.keyCode == 13) {callToJs((#{rich:component('user')}.getValue())); }"/>
    

2 个答案:

答案 0 :(得分:0)

在richfaces 4.x中你可以做这样的事情:

<rich:hotKey key="enter" onkeydown="callToJs(#{rich:jQuery('user')}.val());"/>

答案 1 :(得分:0)

您的代码存在一些问题:

  • a4j:ajax用于响应客户端事件发出ajax请求,如果您只想执行某些JavaScript,则可以使用父组件的on *属性
  • event.keyCode无法在&#34; oncomplete&#34;因为那并没有收到keyup事件
  • a4j:jsFunction需要在&lt; rich:select&gt;之外定义,它不能是子元素
  • select.getValue()返回所选选项,getLabel()返回键入的字符串

所以正确的方法是:

<rich:select id="user"
         value="#{userLoginBean.user}"
         required="true"
         listWidth="385px"
         enableManualInput="true"
         defaultLabel="Please Enter"
         onkeyup="if (event.keyCode == 13) {callToJs((#{rich:component('user')}.getLabel())); }">

…

</rich:select>
<a4j:jsFunction name="callToJs"  actionListener="#{userLoginBean.searchUserList}" >
    <a4j:param name="value" assignTo="#{bean.searchValue}" />
</a4j:jsFunction>

但我认为合并两个列表将是一个更好的解决方案。