Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf rich:select with enableManualInput=“true”不会激发侦听器_Jsf_Richfaces_Facelets - Fatal编程技术网

Jsf rich:select with enableManualInput=“true”不会激发侦听器

Jsf rich:select with enableManualInput=“true”不会激发侦听器,jsf,richfaces,facelets,Jsf,Richfaces,Facelets,我正在尝试使用rich:select和enableManualInput=true设置一个可编辑的组合框 我在处理错误的用户输入时遇到问题:如果用户键入的值未包含在可选selectItems列表中,我希望恢复该字段的先前值。但是,我找不到一种方法来附加一个有效的事件处理程序,无论它是javascript还是在这种情况下被触发的服务器端 <rich:select id="tracoChoice" value="#{customerActivitiesController.selec

我正在尝试使用rich:select和enableManualInput=true设置一个可编辑的组合框

我在处理错误的用户输入时遇到问题:如果用户键入的值未包含在可选selectItems列表中,我希望恢复该字段的先前值。但是,我找不到一种方法来附加一个有效的事件处理程序,无论它是javascript还是在这种情况下被触发的服务器端

<rich:select id="tracoChoice"

    value="#{customerActivitiesController.selectedTraco}"

    enableManualInput="true">

    <f:selectItems value="#{customerActivitiesController.selectableTracos}"/>

    <a4j:ajax event="change" execute="@this" listener="#{customerActivitiesController.onSelectedTracoChange}" render="currentCustomerActivity"/>

</rich:select>
如果我从下拉列表中选择一个值,则会按预期调用onSelectedTracoChange。如果我只是在输入字段中键入一个随机值,然后按ENTER键或TAB键,则不会调用onSelectedTracoChange


我还尝试了valueChangeListener,但没有成功。在javascript方面,我尝试了onblur和onchange的各种组合,但这些组合也适用于正常的值选择。我只是想,一定有一种更简单的方法让我逃避…

没有触发事件,因为从技术上讲,您没有选择任何内容

您可以简单地使用onkeyup或其他事件,但不能仅使用,因为您需要过滤它们:

<a4j:ajax event="keyup" oncomplete="if (event.keyCode == 13) { resetInput(); }" />

<a4j:jsFunction name="resetInput" actionListener="#{customerActivitiesController.onSelectedTracoChange}" />

尝试此方法后,问题是在选择某个值之前,值即CustomerActiviesController.selectedTraco不会得到更新。如果我在列表外键入某个内容,则触发任何事件,该事件接受旧值。在这种情况下,通过JavaScript获取值,并通过JSF函数将其发送到服务器。您的意思是通过名称从控件获取值?如果有,请提供代码示例。
<a4j:jsFunction name="resetInput" actionListener="#{customerActivitiesController.onSelectedTracoChange}" >
    <a4j:param name="input" assignTo="#{bean.value}" />
</a4j:jsFunction>
resetInput(RichFaces.$(clientIdOfSelect).getInput().val())