【问题标题】:"onchange" not working for selectOneMenu in PrimeFaces 3.2“onchange”不适用于 PrimeFaces 3.2 中的 selectOneMenu
【发布时间】:2012-04-22 13:45:09
【问题描述】:

我的 selectOneMenu 没有触发 onchange 事件。代码如下:

 <p:selectOneMenu id="select_preset" 
                  value="#{JobMgmtBean.presetGroupName}" 
                  valueChangeListener="#{PFJobMgmtBean.PresetGroupChangeEvent}" 
                  onchange="submit();">
    <f:selectItems value="#{JobMgmtBean.presetGroupList}"/>
</p:selectOneMenu>

selectOneMenu 很好地填充,我可以选择不同的值。但我希望在我更改选择后,页面会被刷新,即支持 bean (RequestScoped) 将被重新创建 (onchange="submit();")?但是当 selectOneMenu 中的选择发生变化时,什么也没有发生。

此外,不调用值更改侦听器 PresetGroupChangeEvent()。

我是不是哪里出错了?

我正在使用 Tomcat 7.0.25 + MyFaces 2.1.6 + PrimeFaces 3.2。

【问题讨论】:

标签: jsf primefaces


【解决方案1】:

尝试删除

onchange="submit();"

并添加

<p:ajax update="@this"/>

当你使用 primefaces 时从你的 p:selectOneMenu

<p:selectOneMenu id="select_preset" 
              value="#{JobMgmtBean.presetGroupName}" 
              valueChangeListener="#{PFJobMgmtBean.PresetGroupChangeEvent}">
    <f:selectItems value="#{JobMgmtBean.presetGroupList}"/>
    <p:ajax update="@this"/>
</p:selectOneMenu>

检查你的听众签名(从大“P”开始?)

import javax.faces.event.ValueChangeEvent;
public void PresetGroupChangeEvent(ValueChangeEvent event) { }

【讨论】:

  • 同时,我切换到 Ajax,它运行良好。如果以后需要,我会检查你的答案。谢谢。
【解决方案2】:

为什么不使用 p:ajax 添加更新属性?我认为重新渲染组件比刷新更好的解决方案,您也可以只重新渲染所需的组件。但是如果你仍然想刷新页面你也可以使用javascript:

<p:selectOneMenu id="select_preset" value="#{JobMgmtBean.presetGroupName}" onchange="window.location.reload();">
    <f:selectItems value="#{JobMgmtBean.presetGroupList}"/>
</p:selectOneMenu>

仅用于更新必要的组件:

 <p:selectOneMenu id="select_preset" value="#{JobMgmtBean.presetGroupName}">
    <f:selectItems value="#{JobMgmtBean.presetGroupList}"/>
    <p:ajax event="change" update="@form" />
</p:selectOneMenu>

【讨论】:

  • 现在为我进行 Ajax 更改为时已晚。你觉得onchange="submit(); 有什么问题吗?
  • 试试 onchange="this.submit();"
  • 谢谢,但 onchange="this.submit();" 没有帮助。
  • 这个onchange="window.location.reload();" 有效,它刷新页面,但我不确定这是否与submit() 相同。我仍然没有收到任何值更改侦听器事件...为什么? :-(。
  • 抱歉,没有查看您的页面就迟到了答案”。检查您的逻辑以确保它不是因为 requestscope 因为它的每个 http 请求都是垃圾。我会尝试第一个 sessionscope 或 viewscope 只是为了查看页面功能。如果 presetGroupList 不是字符串列表,请尝试 添加 itemlabel 和 item value 属性。
【解决方案3】:

这对我有用

<p:selectOneMenu id="select_preset" 
                  value="#{JobMgmtBean.presetGroupName}" 
                  valueChangeListener="#{PFJobMgmtBean.PresetGroupChangeEvent}">
        <f:selectItems value="#{JobMgmtBean.presetGroupList}"/>
        <p:ajax process="select_preset" partialSubmit="true" event="valueChange"  update="yourComponentName"/>
    </p:selectOneMenu>

【讨论】:

    【解决方案4】:

    尝试使用 primefaces 中的 ajax 并仅刷新您想要刷新的内容

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2015-01-09
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      相关资源
      最近更新 更多