日期:2014-05-16 浏览次数:20320 次
在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 > 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 < 18}</if> <to-view-id>/page4.jsp</to-view-id> </navigation-case> </navigation-rule>?
?xml中不能识别大于号(>)和小于号(<),所以先要转义。