commandLink的immediate="true"
是否应该跳过验证?当我点击该链接时,我仍然收到“密码是必需的”消息吗?
<h:inputSecret id="j_password" autocomplete="off" value="#{authenticationBean.password}" required="true" requiredMessage="Password is Required" />
<p:commandLink action="#{authentication.forgotPassword}" ajax="false">
<h:outputText value="#{bundle['login.forgotpassword.TEXT']}" immediate="true"/>
</p:commandLink>
答案 0 :(得分:1)
您已将其放在<h:outputText>
而不是<p:commandLink>
上。 immediate
属性对UIOutput
组件没有影响(并且在某些环境中也会产生XML验证错误),它仅对UIInput
和UICommand
组件产生影响。将属性移动到<p:commandLink>
组件。
答案 1 :(得分:1)
immediate属性不会跳过任何验证。它将组件及其所有事件,验证器等移动到APPLY_REQUEST阶段。这样您就有机会在所有其他非立即输入和命令之前处理输入和命令。
http://www.javacodegeeks.com/2012/01/jsf-and-immediate-attribute-command.html
如果您想立即跳过验证,则必须在立即采取措施时采取适当的措施,以避免进一步处理输入及其事件,如FacesContext Redirect。
答案 2 :(得分:0)
<o:validateBean>
允许开发人员在每个UICommand或UIInput组件的基础上控制bean的验证,以及在类级别验证给定的bean。
该标准仅允许在基于表单或基于请求的基础上进行验证控制(通过在其属性中使用多个标签和条件EL表达式),这可能最终以样板代码形式出现。 尽管有该标准的名称,但该标准实际上根本没有任何设施来验证bean。
<o:validateBean disabled="true"/>
该命令将跳过验证
<p:commandButton
id="refresh"
icon="fa fa-refresh"
styleClass="refresh-button btn-blue"
process="@form"
update="phone_1 @form:htmlView">
<o:validateBean disabled="true"/>
</p:commandButton>
OR
<o:skipValidators>
标记处理程序允许开发人员在执行UICommand或ClientBehaviorHolder操作时完全跳过验证。该标记处理程序必须放置在UICommand或ClientBehaviorHolder组件内部(客户端行为持有者组件是支持<f:ajax>
的那些组件)。
<p:commandButton
id="refresh"
icon="fa fa-refresh"
styleClass="refresh-button btn-blue"
process="@form"
update="phone_1 @form:htmlView">
<o:skipValidators/>
</p:commandButton>
如果您想了解更多,请看这里:
http://showcase.omnifaces.org/validators/validateBean http://showcase.omnifaces.org/taghandlers/skipValidators