-1

valueChangeListener在primefacesselectOneRadio上根据所选选项在页面上呈现一些组件,但它不起作用

<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将打印在控制台中,但上述组件未呈现

4

2 回答 2

0

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

于 2013-06-07T20:59:31.070 回答
0

几件事:

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

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

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

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

4) 你的 outputlabel 应该基于 #{someBean.booleanVariable} 有条件地呈现,并且应该在一个 id 为“triggerGender”的组件中

于 2013-06-07T12:11:55.090 回答