JSF-页面导航
页面导航
1)导航处理涉及的术语:
-动作值:触发动作事件的组件的action:EL方法表达式.字符串文字。
-结果值:动作组件的action属性的:EL方法表达式的返回值.字符串文字;或结果组件的outcome的值表达式计算结果...
-视图ID:以“/”开头、相对于应用上下文路径的视图(页面)URL。
2)隐式导航
当未定义导航规则或没有匹配的导航规则时,导航处理器将结果值看做目标视图ID。如果结果值不以“/”开头,则在其前添加源视图相对于应用上下文路径的路径。如果结果不含扩展名,则在其后添加源视图的文件扩展名。
3)导航规则
每一个配置文件可包含多个navigation-rule元素
每个navigation-rule声明一个导航规则navigation-case
在navigation-rule元素中:
·from-view-id子元素用于指定源视图的视图ID
·navigation-case子元素声明一个导航案例
如:<navigation-rule>
<from-view-id>/indexs.xhtml</from-view-id>
<navigation-case>
<from-action>#{myBean.action}</from-action>
<if>#{myBean.valid}</if>
<to-view-id>#{myBean.nextViewID}</to-view-id><!--也可以直接指定目标视图ID-->
<redirect/></navigation-case>
</navigation-rule>
在navigation-case元素中:
·from-outcome:用于指定适用该导航案例的结果值
·from-action:用于指定适用该导航案例的动作值
·if:一个布尔型的值表达式,判断该导航案例是否匹配动态条件
4)导航算法
依次检索相匹配的导航规则,通常是指from-view-id元素内容为源视图ID的导航规则。
对于每一个导航规则,依次检索相匹配的导航案例。
5)重定向
在h:commandButton或者h:commandLink形成的POST请求中,可以在navigation-case中插入redirect子元素,或在元素值中添加名为faces-redirect,值为true的请求参数,要求JSF框架重定向至目标视图
状态码为302表示重定向;响应头包括Location,指定重定向的目标页面的URL。
6)结果类标记: h:link h:button
结果类标记组件在呈现时,都会根据outcome计算结果值。
然后由导航处理器根据结果值确定目标视图。
单击由结果类标记呈现的超链接或者按钮将产生目标视图的GET请求,如:
<h:link value-"返回主页" outcome="index"/>
<h:button value="GET请求"/>
7)视图参数
在JSF中添加f:viewParam元素、声明视图参数:
<f:metadata><f:viewParam name="t1" value="#{me.t1}"/><!--若存在名为t1的查询参数--><!--me受管Bean的setT1调用,传入参数-->
</f:metadata>