【问题标题】:Execute some code when a value from a p:selectOneMenu is selected选择 p:selectOneMenu 中的值时执行一些代码
【发布时间】:2013-09-25 13:53:29
【问题描述】:

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

要使用生成的密码,必须从选择框中选择一个新值。更改触发使用所选值中的值填充密码/确认字段(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>

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

【问题讨论】:

  • 你的意思是我还需要在选择相同的值 i>的情况下,我需要实现密码字段的填充? span>
  • @patstuart:当当前选中的值(即默认值)被重新选中时。

标签: ajax jsf-2 primefaces listener selectonemenu


【解决方案1】:

如果值未更改,则无法触发 change 事件。实际上,一种方法是提供一个默认值,如 “请选择” 中的 #{null} 值,或者甚至带有 noSelectionOption="true" 的附加 &lt;f:selectItem&gt;。这会强制最终用户将值实际更改为有效值。

例如

<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>

另一种方法是改用&lt;p:selectOneListbox&gt;,如果您没有很多项目,这可能会更好。

<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>

【讨论】:

  • 补充一点,仅供参考:我过去曾遇到过一个错误,试图让noSelectItem&lt;p:selectOneMenu&gt; 工作。我不知道这个 bug 是在 PrimeFaces 还是 MyFaces 2 中。
  • @patstuart:确实:stackoverflow.com/questions/14110755/… 顺便说一句,错误在 PF 中。
  • 你超过了我!恭喜你成为第三名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多