フォームに「必須」が「true」に設定された空の要素がある場合<h:selectOneMenu>
、別の値に応じて値を自動的に設定する方法(または他のコンポーネント)を誰かに教えてもらえますか? <h:selectOneMenu>
設定する場合、<a4j:support event="onchange" reRender="anotherElement" immediate="true" />
変更された値が設定されていないため、何も変更されません。しかしimmediate="true"
、これまたはその要素を空にすることはできないというメッセージが常にあります。動作しないコード例を次に示します。
<h:outputLabel value="* #{msg.someField}: "/>
<h:panelGrid cellpadding="0" cellspacing="0">
<h:selectOneMenu id="someSelect"
value="#{MyBean.someObj.someId}"
required="true" label="#{msg.someField}"
>
<a4j:support event="onchange" reRender="anotherSelect" limitToList="true" immediate="true"/>
<f:selectItem itemValue=""/>
<f:selectItems value="#{MyBean.someList}"/>
</h:selectOneMenu>
<rich:message for="someSelect" styleClass="redOne"/>
</h:panelGrid>
<h:outputLabel value="* #{msg.anotherField}: "/>
<h:panelGrid cellpadding="0" cellspacing="0">
<h:selectOneMenu id="anotherSelect"
value="#{MyBean.someObj.anotherId}"
required="true" label="#{msg.anotherField}"
>
<f:selectItem itemValue=""/>
<f:selectItems value="#{MyBean.anotherList}"/>
</h:selectOneMenu>
<rich:message for="anotherSelect" styleClass="redOne"/>
</h:panelGrid>
<h:outputLabel value="* #{msg.name}: "/>
<h:panelGrid cellpadding="0" cellspacing="0">
<h:inputText id="myName" value="#{MyBean.someObj.myName}"
required="true" label="#{msg.name}"/>
<rich:message for="myName" styleClass="redOne"/>
</h:panelGrid>
したがって、ここで (繰り返します)、「someSelect」を変更しようとすると、「anotherSelect」はその値を更新する必要がありますが、「someSelect」の値を取得しようとすると null (にimmediate
設定されている場合true
) または空の要素ではフォームの検証が失敗します。検証をスキップして、この変更された値を「someSelect」から取得するにはどうすればよいですか?