正如Struts的struts-config.xml一样,JSF也有类似的faces-config.xml配置文件:
| < faces-config> < navigation-rule> < from-view-id>/index.jsp< /from-view-id> < navigation-case> < from-outcome>login< /from-outcome> < to-view-id>/welcome.jsp< /to-view-id> < /navigation-case> < /navigation-rule> < managed-bean> < managed-bean-name>user< /managed-bean-name> < managed-bean-class>com.corejsf.UserBean< /managed-bean-class> < managed-bean-scope>session< /managed-bean-scope> < /managed-bean> < /faces-config> |
在Struts-config.xml中有ActionForm Action以及Jsp之间的流程关系,在faces-config.xml中,也有这样的流程,我们具体解释一下Navigation:
在index.jsp中有一个事件:
< h:commandButton label="Login" action="login" />
action的值必须匹配form-outcome值,上述Navigation配置表示:如果在index.jsp中有一个login事件,那么事件触发后下一个页面将是welcome.jsp
JSF有一个独立的事件发生和页面导航的流程安排,这个思路比struts要非常清晰。
managed-bean类似Struts的ActionForm,正如可以在struts-config.xml中定义ActionForm的scope一样,这里也定义了managed-bean的scope为session。
但是如果你只以为JSF的managed-bean就这点功能就错了,JSF融入了新的Ioc模式/依赖性注射等技术。
Ioc模式
对于Userbean这样一个managed-bean,其代码如下:
| public class UserBean { private String name; private String password; // PROPERTY: name // PROPERTY: password < managed-bean> < managed-property> < managed-property> |
faces-config.xml这段配置其实是将"me"赋值给name,将secret赋值给password,这是采取Ioc模式中的Setter注射方式。

