Может кто-нибудь сказать мне, как автоматически установить <h:selectOneMenu>
(или любой другой компонент) со значениями, зависящими от другого <h:selectOneMenu>
, если в форме есть пустые элементы с «required», установленным в «true»? Если установить <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', он получает нулевое значение (если 1008 * установлен на true
) или проверка формы завершается неудачно на пустых элементах. Как я могу пропустить проверку, но получить это измененное значение из 'someSelect'?