JSF Navigation by Examples JSF导航文件设置示例 The JavaServer Faces (JSF)的Navigation框架提供了一些导航规则,可以使您在设计网站应用程序时定义view(大部分是JSP页面)之间的页面导航。这些规则和其他一些设置一起定义在JSF配置文件中。该文件的名称一般是faces-config.xml。不过完全可以把这个文件名改成其他名字,甚至可以用多个配置文件来存放相关的JSF配置信息,只要在web.xml文件中进行类似下面的设置:
一个简单的例子 一个导航规则的构成其实很简单,让我们来看第一个例子:
设置一个默认的输出事件(Outcome Case) 基本结构很简单,但是可以在这个基础在进行很多变化。请看下一段代码:
利用模式 JSF的navigation模型允许我们利用模式(patterns)。这些模式有一个以星号“*”结尾的字符串组成。参见下例:
Resolving More Than One Matching Rule 现在我们来细察一下JSF导航模型中该如何处理多个规则。具体见下面例子:
该例中,第二个导航规则,而不是前一个,将对/pages/login.jsp生效,尽管该页面也匹配第一个规则中的模式 /pages/*。这说明对于一个特定的from-outcome,匹配更为具体的规则将生效。 "Global" Outcomes 假设现在我们需要一个globalHelp输出(outcome) 可以使得从任何页面转到帮助页面/help/index.html。要实现该效果,可以利用下面两个声明中的任何一个:
第一段代码在标签from-view-id中使用了星号,而第二断代码甚至根本没有用from-view-id标签。两者都可以达到相同的效果。不过需注意的是,一个空的from-view-id元素是没有任何效果的,例如:
规则的冲突 这是个有趣的问题。如果有两个相同的from-view-id,其包含from-outcome也相同,只是指向不同的页面。来看看下一个例子:
将一个导航规则分开为几部分 这是同一种效果的不同实现方式。试比较下面两段代码:
运行时两者效果相同。不过,第二段代码显示规则声明可以任意分开后放在配置文件的不同位置,甚至是不同的配置文件中。你可以根据自己的需要选择不同的方式。 在action中使用导航规则 现在,该看看如何将前面所学内容应用于程序中了。下面便是一个JSP页面可能包含的代码:
action属性值将被用作一个输出(outcome)。这里是另一种方式:
这意味着将调用GetNameBean的helloAction方法,该方法运行的结果将成为一个outcome。注意helloAction必须是一个返回值为字符串的public方法。 上面两种不同action属性值的写法区别在考虑到配置文件中的一个标签时将比较重要,这个标签便是from-action 标签,我们前面还未提及。请参考下面代码:
在这段代码中,两个navigation cases均含有相同的from-view-id 以及from-outcome元素,不过第二个navigation case包含一个from-action元素。如果sayHello这个outcome是通过GetNameBean.helloAction产生的话,第二个navigation case将生效,不过其原因仅仅是除from-outcome外两者具有相同的优先级(原文:If the sayHello outcome is determined by GetNameBean.helloAction, the second navigation case will take effect, but only because otherwise both cases had equal precedence.) Review 为了检查您对本文的理解情况。请看下面例子,在 /pages/inputname.jsp这页面中对commandButton有一下声明:
而JSF配置文件则包含了一下内容:
如果上面页面中的提交按钮被按下,到底跳到/a.jsp or /b.jsp的哪个页面,如果在GetNameBean.helloAction返回值为sayHello的情况下又如何呢? |
JSF导航文件设置示例
最新推荐文章于 2021-10-25 21:19:12 发布