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" />
Смотри также: