我正在做密码编辑器。可以通过两种方式输入密码:手动输入密码和确认值,或者选择一些已生成的密码。
要使用生成的密码,必须选择选择框中的新值。此更改会触发使用所选值中的值填写密码/确认字段(psw1
和psw2
)。
<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>
当选择相同的值时,我还需要实现填写密码字段。我该如何实现呢?一种方法是添加一个额外的值,一个默认的空值。
答案 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>