7

如果不验证其他输入,我无法将我的设置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>

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

4

1 回答 1

31

当前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>   

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

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

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

也可以看看:

于 2011-10-07T13:36:26.647 回答