h:selectOneMenu onchange ="submit()"immediate ="true"不会跳过其他输入的验证

Den*_*niz 7 selectonemenu jsf-2

我无法在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>
Run Code Online (Sandbox Code Playgroud)

当我更改菜单值时,其他输入的验证器仍然会激活.我怎么能否认呢?

Bal*_*usC 29

immediate="true"当前输入组件不会开火阻止其他输入组件的验证.它只会导致当前输入组件比平时更早地验证一个阶段.基本上,您需要将a附加valueChangeListener到输入组件,然后调用FacesContext#renderResponse()侦听器方法,以便跳过所有其他输入组件的处理.

但是,由于您已经在使用JSF 2.0,因此使用ajax功能更好/更容易,而不是使用这种老式的JSF 1.x方法.

例如

<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>   
Run Code Online (Sandbox Code Playgroud)

public void changeCountry() {
    System.out.println("Selected country is: " + country);
}
Run Code Online (Sandbox Code Playgroud)

如果您希望在更改选择时重新呈现表单的某些部分,请使用该render属性.例如

    <f:ajax listener="#{bean.changeCountry}" render="otherComponentId" />
Run Code Online (Sandbox Code Playgroud)

也可以看看: