【问题标题】:valueChangeListener not working with PrimeFaces selectOneRadiovalueChangeListener 不适用于 PrimeFaces selectOneRadio
【发布时间】:2013-06-07 11:38:07
【问题描述】:

我在primefaces selectOneRadio上放了一个valueChangeListener,以根据所选选项在页面上呈现一些组件,但它不起作用

<p:selectOneRadio id="Gender"
    value="#{someBean.booleanVariable}"
    required="true"
   valueChangeListener="#{personBean.triggerGender}">
    <f:ajax execute="@this" listener="#{personBean.triggerGender}" render="triggerGender" />
  <f:selectItem itemLabel="Female" itemValue="female" />
  <f:selectItem itemLabel="Male" itemValue="male" /> 
</p:selectOneRadio>

personBean

public class ReportPerson {

private boolean female, male = true;
    public void triggerGender(ValueChangeEvent e) {
    System.err.println("Fired");
    if (e.getNewValue().equals("female")) {
        female = true;
        male = false;
    }
 }

这是 JSF 页面中将根据布尔值 femalemale 的值呈现的组件

    <h:form id="triggerGender">
                        <h:outputLabel value="Does he has " styleClass="Labels"
                            rendered="#{personBean.male}" />
                        <h:outputLabel rendered="#{personBean.male}" />
                        <h:outputLabel rendered="#{personBean.male}" />

                        <h:outputLabel for="Moustache" value="Mustache ?"
                            styleClass="Labels" rendered="#{personBean.male}" />
                        <p:selectBooleanCheckbox
                            value="#{personBean.personDescription.moustach}"
                            rendered="#{personBean.male}" />
                        <h:outputLabel rendered="#{personBean.male}" />


                        <h:outputLabel value="Beared ? " styleClass="Labels"
                            rendered="#{personBean.male}" />
                        <p:selectBooleanCheckbox
                            value="#{personBean.personDescription.beared}"
                            rendered="#{personBean.male}" />
                        <h:outputLabel rendered="#{personBean.male}" />


                        <h:outputLabel value="Does she wear " styleClass="Labels"
                            rendered="#{personBean.female}" />
                        <h:outputLabel rendered="#{personBean.female}" />
                        <h:outputLabel rendered="#{personBean.female}" />

                        <h:outputLabel value="Describe?" styleClass="Labels"
                            rendered="#{personBean.female}" />
                        <p:selectBooleanCheckbox
                            value="#{personBean.personDescription.hijab}"
                            rendered="#{personBean.female}" />
                        <h:outputLabel rendered="#{personBean.female}" />

                    </h:form>

当我将单选按钮更改为女性时,声明 Fired 会打印在控制台中,但上面的组件未呈现 w

【问题讨论】:

  • 您的代码中没有错字吗? (&lt;h:outputLabel rendered="#{personBeann.female}" /&gt; 应该是&lt;h:outputLabel rendered="#{personBean.female}" /&gt;
  • 不,这是复制/粘贴的错误,在我的原始代码中一切正常

标签: ajax jsf jsf-2 primefaces selectoneradio


【解决方案1】:

几件事:

1) 如果你想知道旧值和新值,你只需要使用 valuechange 监听器。如果您只渲染组件,请使用:

 <f:ajax execute="@this" listener="#{personBean.triggerGender}" render="triggerGender"></f:ajax>

2) 如果你想用ajax刷新它,你的表单中需要有一个id为'triggerGender'的组件

3) 您的单选按钮组件绑定到#{someBean.booleanVariable},但是您选择的项目的项目值是字符串。它们不应该是 true 或 false 的布尔值吗?

4) 您的输出标签应根据 #{someBean.booleanVariable} 有条件地呈现,并且应位于 ID 为“triggerGender”的组件内

【讨论】:

  • 我是这样做的,但是 id="triggerGender" 的表单组件仍然没有更新
  • 请在问题中包含正确的 xhtml 和您的托管 bean 代码
【解决方案2】:

您应该将表单嵌套在 h:panelGroup 中并呈现您的 PanelGroup

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2011-11-11
    • 2015-01-02
    • 2012-10-24
    • 2013-05-02
    • 1970-01-01
    • 2011-03-31
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多