JSF教程
一入门
1)JSF 官方网站的 下载区 下载参考实作
http://java.sun.com/j2ee/javaserverfaces/download.html
JSF需要的lib
* jsf-impl.jar
* jsf-api.jar
* commons-digester.jar
* commons-collections.jar
* commons-beanutils.jar
* jstl.jar
* standard.jar
还需要
jstl.jar 与 standard.jar 档案
1.JSF官网java.sun.com/j2ee/javaserverfaces
sourceforge.net/projects/myfaces 开放源码版的实现。
参考 http://java.sun.com/webservices/downloads/webservicespack.html
示例应用和代码清单 www.brainysoftware.com (要复制包)
2.jsf-api.jar 包含 Faces servlet和javax.faces包里的相关类。
jfs-ri.jar JSF的参考实现。
jstl.jar 和standard.jar使用jsp标准标记库里的标记需要这两个文件。
commons-beanutils.jar用来定义和访问JavaBeans组件属性的工具类。
commons-digester.jar此库文件包含Apache Common Digester类。
commons-logging.jar 一个通用的,灵活的日志工具。
2)映射web.xml
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern> 还有/faces
</servlet-mapping>
请求是/index.faces的话, 则实际上会唤起/index.jsp 网页
3)faces-config.xml
<faces-config>
<navigation-rule>
<from-view-id>/pages/index.jsp</from-view-id>
<navigation-case>
<from-outcome>login</from-outcome>
<to-view-id>/pages/welcome.jsp</to-view-id>
</navigation-case>
</navigation-rule>
您还可以在<navigation-case>中加入<from-action>, 进一步规范窗体结果必须根据哪一个动作方法
(action method)
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.UserBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
在<navigation-rule>中,我们定义了页面流程,当请求来自<from-view- id>中指定的页面,并且指定了
<navigation-case>中的<from-outcome>为 login 时,则会将请求导向至<to-view-id>所指定的页面。
<from-view-id>如果没有设定,表示来源网页不作限制,您也可以使用 * 显式的在定义档中表明,例如:
<from-view-id>/*或者*</from-view-id>
4)错误讯息属性
<h:outputText value="#{user.errMessage}"/>
errMessage = "名称或密码错误";
JSF Expression Language #{}
5) param
param是 JSF EL预设的隐含对象变量,它代表 request 所有参数的集合,实际是一
个 java.util.Map型态对象,JSF 所提供的隐含对象,大致上对应于 JSP 隐含物件 ,不过
JSF 隐含对象移除了 pageScope与 pageContext,而增加了 facesContext与 view,
它们分别对应于 javax.faces.context.FacesContext与
javax.faces.component.UIViewRoot。
对于 Map 型态对象,我们可以使用 '.' 运算子指定 key值来取出对应的 value,也可
以使用 [ 与 ] 来指定,例如:
<f:view>
<b> 您好, <h:outputText value="#{param['name']}"/> </b>
</f:view>
6)map,list
<f:view>
<h:outputText value="#{someBean.someMap[user.name]}"/>
</f:view>
如果变量是 List 型态或数组的话,则可以在 [] 中指定索引,例如
<f:view>
<h:outputText value="#{someBean.someList[0]}"/>
</f:view>
7)国际化讯息
messages.properties默认的
<f:loadBundle basename="messages" var="msgs"/>
<f:view>可以设定 locale属性,直接指定所要使用的语系,例如:
如果设定为以下的话,就会使用
messages_en.properties:
<f:view locale="en">
<f:loadBundle basename="messages" var="msgs"/>
您也可以在 faces-config.xml中设定语系,例如:
<faces-config>
<application>
<local-config>
<default-locale>en</default-locale> 默认语言
<supported-locale>zh_TW</supported-locale> 支持的语言
</local-config>
</application>
.....
</faces-config>
在<local-config>一定有一个<default-locale>, 而<supported-locale>可以有好
几个,这告诉 JSF 您的应用程序支持哪些语系。
当然,如果您可以提供一个选项让使用者选择自己的语系会是更好的方式,例如根据
user 这个 Bean的 locale属性来决定页面语系:
<f:view locale="#{user.locale}">
<f:loadBundle basename="messages" var="msgs"/>
在页面中设定一个窗体,可以让使用者选择语系,例如设定单选钮:
<h:selectOneRadio value="#{user.locale}">
<f:selectItem itemValue="zh_TW"
itemLabel="#{msgs.zh_TWText}"/>
<f:selectItem itemValue="en"
itemLabel="#{msgs.enText}"/>
</h:selectOneRadio>
*<f:selectItem itemValue="" itemLabel=""/>