简体   繁体   English

“onchange”不适用于 PrimeFaces 3.2 中的 selectOneMenu

[英]"onchange" not working for selectOneMenu in PrimeFaces 3.2

My selectOneMenu isn't fireing an onchange event.我的 selectOneMenu 没有触发 onchange 事件。 Here is the code:这是代码:

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

The selectOneMenu is nicely populated, and I can select different values. selectOneMenu 填充得很好,我可以 select 个不同的值。 But I would expect that after I change a selection, page would be refreshed, ie backing bean (RequestScoped) would be recreated (onchange="submit();")?但我希望在我更改选择后,页面会被刷新,即支持 bean (RequestScoped) 会被重新创建 (onchange="submit();")? But nothing happens when selection in the selectOneMenu is changed.但是当 selectOneMenu 中的选择发生变化时,什么也没有发生。

Also, value change listener PresetGroupChangeEvent() is not called.此外,不会调用值更改侦听器 PresetGroupChangeEvent()。

Did I go wrong somewhere?我 go 是不是哪里错了?

I'm using Tomcat 7.0.25 + MyFaces 2.1.6 + PrimeFaces 3.2.我正在使用 Tomcat 7.0.25 + MyFaces 2.1.6 + PrimeFaces 3.2。

try to remove尝试删除

onchange="submit();"

and to add并添加

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

from your p:selectOneMenu when you using primefaces从你的 p:selectOneMenu 当你使用 primefaces

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

check your listener signature (starts from big "P"?)检查你的听众签名(从大“P”开始?)

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

why you are not adding update attribute using p:ajax?为什么不使用 p:ajax 添加更新属性? I think rerendering components more better solution than refreshing, also you can just rerender needed components.我认为重新渲染组件比刷新更好的解决方案,您也可以只重新渲染所需的组件。 But if you still want to refresh page you can also use javascript:但如果你还想刷新页面,你也可以使用 javascript:

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

and just for updating necessary components:并且仅用于更新必要的组件:

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

this works for me这对我有用

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

try to use ajax from primefaces and refresh only what you want to refresh尝试使用 ajax 来自 primefaces 并仅刷新您想要刷新的内容

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM