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)