日期:2014-05-16  浏览次数:20328 次

JSF2中Navigation的配置

在JSF2中,页面的当航全部是在faces-config.xml中配置的,例如:

</navigation-rule>	
       <from-view-id>/index.jsp</from-view-id>	
       <navigation-case>
            <from-outcome>success</from-outcome>
	  <to-view-id>/page1.jsp</to-view-id>
       </navigation-case>
</navigation-rule>

?<from-view-id>代表请求的页面,<to-view-id>代表返回的页面,而<from-outcome>既可以代表页面配置的action的值,也可以是ManagedBean中action方法返回的字符串。如果页面上<h:commandButton> 的action是一个EL表达式,则<from-outcome>代表的是action方法返回的字符串。我们还可以添加<from-action>节点来代表<from-outcome>来自与action方法。例如:

<navigation-rule>
      <from-view-id>/index.jsp</from-view-id>
      <navigation-case>
            <from-action>#{userBean.login}</from-action>
            <from-outcome>success</from-outcome>
            <to-view-id>/page2.jsp</to-view-id>
      </navigation-case>
      <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/page1.jsp</to-view-id>
      </navigation-case>
</navigation-rule>

?如果页面上面action="success",则会返回page1.jsp,如果action="#{userBean.login}",则会返回page2.jsp

forward 和redirect

JSF2默认的跳转方式为forward,这样返回的页面会依然为index.jsp,且共享request中的请求值。假如需要改成Redirect请求,有俩种方法。如国页面的action的值是简单的字符串,可以添加faces-redirect=true来实现: action="success?faces-redirect=true"。如果页面是action="#{userBean.login}" EL表达式,则可以添加到faces-config.xml中:

?

<navigation-case>
        <from-outcome>success</from-outcome>
	<to-view-id>/page1.jsp</to-view-id>
	<redirect/>
</navigation-case>
 
?带条件的跳转

?? 我们还可以在<navigation-case>中添加<if>节点来判断条件。例如如果用户的年龄大于18,则转到page3.jsp,如果用户的年龄小与18,则转到page4.jsp:

<navigation-rule>
     <navigation-case>
         <from-action>#{userBean.login}</from-action>
         <from-outcome>success</from-outcome>
         <if>#{userBean.age &gt; 18}</if>
         <to-view-id>/page3.jsp</to-view-id>
         <redirect/>
      </navigation-case>
      <navigation-case>
          <from-action>#{userBean.login}</from-action>
          <from-outcome>success</from-outcome>
          <if>#{userBean.age &lt; 18}</if>
          <to-view-id>/page4.jsp</to-view-id>
       </navigation-case>
</navigation-rule>
?

?xml中不能识别大于号(>)和小于号(<),所以先要转义。