h: selectOneMenu onchange = "submit ()" немедленный = "истина" не пропускает проверку других входных данных - PullRequest
7 голосов
/ 07 октября 2011

Я не могу настроить мой h:selectOneMenu на немедленную отправку без проверки других входных данных. Вот код:

<h:selectOneMenu value="#{a.avalue}" onchange="submit()" immediate="true">   
    <f:selectItems value="#{b.bvalue}" var="k" itemLabel="#{k.asdad}"  
        itemValue="#{k.asdad}"/>   
</h:selectOneMenu>   
<h:inputText id="sada" value="#{c.cvalue}" required="true"  
    requiredMessage="*asdadadadasd"  
    validatorMessage="*asdsadadadadad">   
    <f:validateLength maximum="80"/>   
</h:inputText>

Когда я изменяю значение меню, валидаторы других входов продолжают работать. Как я могу это отрицать?

1 Ответ

28 голосов
/ 07 октября 2011

immediate="true" на текущем компоненте ввода не останавливает валидаторы других компонентов ввода от запуска. Это только приводит к тому, что текущий компонент ввода будет проверен на одну фазу раньше, чем обычно. По сути, вам нужно присоединить valueChangeListener к компоненту ввода и затем вызвать FacesContext#renderResponse() в методе слушателя, чтобы обработка всех других компонентов ввода была пропущена.

Но поскольку вы уже используете JSF 2.0, гораздо лучше / проще использовать возможности ajax вместо этого старомодного подхода JSF 1.x.

1008 * Е.Г. *

<h:selectOneMenu value="#{bean.country}">
    <f:selectItems value="#{bean.countries}" var="country" itemLabel="#{country.name}" itemValue="#{country.code}"/>
    <f:ajax listener="#{bean.changeCountry}" />
</h:selectOneMenu>   

с

public void changeCountry() {
    System.out.println("Selected country is: " + country);
}

Если вы хотите перерисовывать некоторые части формы каждый раз, когда изменяется выбор, используйте атрибут render. Э.Г.

    <f:ajax listener="#{bean.changeCountry}" render="otherComponentId" />

Смотри также:

...