JSF生命周期阶段执行立即= true

时间:2015-11-13 09:59:23

标签: jsf immediate-attribute

我正在关注this以了解JSF生命周期。我想在下面提到的各种情况下检查我对JSF immediate="true"属性的理解是否正确。我用简单的JSF表单和bean来尝试这些案例。

  

案例1:立即="真"在commandButton

<h:form>
        <table>
            <tr>
              <td><h:outputLabel value="Name"/></td>
              <td><h:inputText value="#{userLogin.name}"/></td>
            </tr>
            <tr>
              <td><h:outputLabel value="Password"/></td>
              <td><h:inputText value="#{userLogin.password}"/></td>
            </tr>
            <tr> 
              <td><h:commandButton value="Sign In" action="#{userLogin.saveData}" immediate="true"/></td>
            </tr>
        </table>
    </h:form>

它直接调用应用程序,即执行saveData动作方法而不进行任何形式处理。此活动在应用请求值生命周期阶段完成。将跳过流程验证更新模型值,调用应用程序等阶段。

  

案例2:立即=&#34;真&#34;在inputText上

<h:form>
        <table>
            <tr>
              <td><h:outputLabel value="Name"/></td>
              <td><h:inputText value="#{userLogin.name}" required="true" immediate="true"/></td>
            </tr>
            <tr>
              <td><h:outputLabel value="Password" required="true"/></td>
              <td><h:inputText value="#{userLogin.password}"/></td>
            </tr>
            <tr> 
              <td><h:commandButton value="Sign In" action="#{userLogin.saveData}"/></td>
            </tr>
        </table>
    </h:form>

当任何字段留空时,不会提交表单。这意味着验证发生在具有immediate="true"的字段和另一个没有立即属性集的字段中,两个值都在模型中更新。有什么区别,怎么理解这个?对于应用请求值阶段中具有immediate属性的输入字段,是否优先进行验证,并且对于 Process Validations 阶段中没有immediate属性的第二个输入字段进行验证?

  

案例3:立即=&#34;真&#34;在inputText和commandButton

<h:form>
        <table>
            <tr>
              <td><h:outputLabel value="Name"/></td>
              <td><h:inputText value="#{userLogin.name}" required="true" immediate="true"/></td>
            </tr>
            <tr>
              <td><h:outputLabel value="Password" required="true"/></td>
              <td><h:inputText value="#{userLogin.password}"/></td>
            </tr>
            <tr> 
              <td><h:commandButton value="Sign In" action="#{userLogin.saveData}" immediate="true"/></td>
            </tr>
        </table>
    </h:form>

表单也提交空值,意味着它没有验证,执行了操作方法,并且我看到在提交期间输入时模型值也没有更新。因此,尽管在应用请求值中调用了操作方法,但仍会跳过所有阶段,例如流程验证更新模型值,调用应用程序 阶段。

我不确定我的理解是否正确。

0 个答案:

没有答案