我无法在不验证其他输入的情况下立即提交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>
当我更改菜单值时,其他输入的验证器仍会触发。我怎么能否认呢?
答案 0 :(得分:28)
当前输入组件上的immediate="true"
不会阻止其他输入组件的验证程序触发。它只会导致当前输入组件比平时更早地验证一个阶段。基本上,您需要将valueChangeListener
附加到输入组件,然后在侦听器方法中调用FacesContext#renderResponse()
,以便跳过所有其他输入组件的处理。
但是,由于您已经在使用JSF 2.0,因此使用ajax功能而不是使用这种老式的JSF 1.x方法会更好/更容易。
E.g。
<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
属性。 E.g。
<f:ajax listener="#{bean.changeCountry}" render="otherComponentId" />