rich:select with enableManualInput =" true"没有解雇听众

时间:2014-09-29 09:57:23

标签: jsf richfaces facelets

我正在尝试使用rich设置一个“可编辑的组合框”:select with 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的各种组合,但这些组合也用于正常值选择。我只是觉得必须有一种更简单的方式逃脱我...

1 个答案:

答案 0 :(得分:0)

由于您在技术上没有选择任何内容,因此没有事件被解雇。

您可以简单地使用onkeyup或其他活动,但由于您需要过滤它们,因此您无法使用<a4j:ajax>

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

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

keycode 13是Enter,Tab是9

EDIT 如果你需要向服务器发送一个值,你可以这样做:

<a4j:jsFunction name="resetInput" actionListener="#{customerActivitiesController.onSelectedTracoChange}" >
    <a4j:param name="input" assignTo="#{bean.value}" />
</a4j:jsFunction>

这将允许您将参数传递给该函数

resetInput(RichFaces.$(clientIdOfSelect).getInput().val()) 
相关问题