-1

以下のように ap:selectOneRadio コンポーネントをバインドしました。

<p:selectOneRadio binding="#{bean.maritalStatusRadio}" value="#{bean.maritalStatus}" >
    <f:selectItems value="#{selectItemList.maritalStatusList}" /> 
    <p:ajax event="change" listener="#{bean.handleChangeInMaritalStatus}" />
</p:selectOneRadio>

しかし、バッキング Bean クラスからその値を更新できません。

SelectOneRadio maritalStatusRadio; 
    public void handleChangeInMaritalStatus() {
            String currentValue =String.valueOf(maritalStatusRadio.getValue());

            if(!currentValue.equals(MARITAL_STATUS_MARRIED)) {
                maritalStatusRadio.setValue(MARITAL_STATUS_MARRIED);

            }

    }`
4

2 に答える 2

0

リスナー メソッドは、select 値を変更する場所ではありません。ユーザーがビューで選択したオプションを変更したときに必要なことを行うためのものです。

選択した値を変更したい場合は、バインドされたフィールド (この場合は bean.maritalStatus) に割り当てられた値を変更するだけです。多くの場所で行うことができます (必要に応じて youtr リスナーを含む)。

通常、preRenderView メソッドは、選択したデフォルト値を初期化する場所です。あなたの見解では:

  <f:metadata>
    <f:event
      type="preRenderView"
      listener="#{bean.initializeForNew}" />
  </f:metadata>

あなたの豆で:

 public void initializeForNew() throws ModelException {
    if (!isPostBack()) {//only on loading
      bean.maritalStatus = getDefaultMaritaStatus();
    }
  }
于 2015-08-13T10:52:23.117 に答える
0
<p:selectOneRadio id="radioButton" binding="#{nominee.maritalStatusRadio}" value="#{nominee.prospective.maritalStatus}"  disabled="#{disabled}" >
                                    <f:selectItems value="#{selectItemList.maritalStatusList}" />
                                    <p:ajax update="radioButton" event="change" listener="#{nominee.handleChangeInMaritalStatus}" />
                            </p:selectOneRadio>
It worked for me I was not updating p:selectOneRadio in  p:ajax
于 2015-08-13T10:57:59.370 に答える