JSF immediate = true跳过验证

时间:2011-03-31 16:07:02

标签: jsf jsf-2

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>

3 个答案:

答案 0 :(得分:1)

您已将其放在<h:outputText>而不是<p:commandLink>上。 immediate属性对UIOutput组件没有影响(并且在某些环境中也会产生XML验证错误),它仅对UIInputUICommand组件产生影响。将属性移动到<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