选择p:selectOneMenu中的值时执行一些代码

时间:2013-09-20 08:40:42

标签: ajax jsf-2 primefaces listener selectonemenu

我正在做密码编辑器。可以通过两种方式输入密码:手动输入密码和确认值,或者选择一些已生成的密码。

要使用生成的密码,必须选择选择框中的新值。此更改会触发使用所选值中的值填写密码/确认字段(psw1psw2)。

<p:selectOneMenu value="#{password.selectedPassword}" >
    <f:selectItems value="#{password.passwords}" var="val"
        itemLabel="#{val}" itemValue="#{val}" />
        <p:ajax update="psw1, psw2" listener="#{password.passwordChanged}"/>
</p:selectOneMenu>

当选择相同的值时,我还需要实现填写密码字段。我该如何实现呢?一种方法是添加一个额外的值,一个默认的空值。

1 个答案:

答案 0 :(得分:1)

如果值未更改,则无法触发change事件。实际上,一种方法是提供默认值,如“请选择” #{null}值,甚至是noSelectionOption="true"的额外<f:selectItem>。这会强制最终用户将值实际更改为有效值。

E.g。

<p:selectOneMenu value="#{password.selectedPassword}" >
    <f:selectItem itemValue="#{null}" itemLabel="--select--" />
    <f:selectItems value="#{password.passwords}" var="val"
        itemLabel="#{val}" itemValue="#{val}" />
        <p:ajax update="psw1, psw2" listener="#{password.passwordChanged}"/>
</p:selectOneMenu>

另一种方法是使用<p:selectOneListbox>代替,如果你没有很多项目,这可能会更好。

<p:selectOneListbox value="#{password.selectedPassword}" >
    <f:selectItems value="#{password.passwords}" var="val"
        itemLabel="#{val}" itemValue="#{val}" />
        <p:ajax update="psw1, psw2" listener="#{password.passwordChanged}"/>
</p:selectOneListbox>