日期:2014-05-16  浏览次数:20475 次

JSF(MyFaces) + Facelets 的一些配置和开发准备

在这里想把用JSF和Facelets开发的一些基本的概念,配置和开发准备留个备忘录。目的是,在今后想用这两样技术的时候,能快速上手,关键的配置和注意点能一目了然,再做一个空的blank prj供开发用。

JSF的各种实现

????? 刚开始一直弄明白JSF RI和Myfaces core是什么东西。 MyFaces Core同样是SUN JSF标准的实现,而JSF RI是SUN实现的JSF的参考。

所以一般都用MyFaces Core。而不用JSF RI。

Facelets与JSF的关系

??? Facelets出现的背景是不使用JSP(JSPX是JSP2.0的文件当然也算JSP)。使得JSF摆脱JSP额外的负担,是程序比JSP运行更快。是很轻量级的框架。

?Facelets也是Apache的项目。

问: XHTML必须用Facelets才能运行吗?

??? 我觉得是。

问:Faces Servlet与faces这两个Servlet什么关系,mapping如何设置?

?? 见下文。

JSF的配置

??? 因为正常开发都是用Myfaces Core的JSF实现,所以JSF的配置就是MyfacesCore的配置。三个主要的部分。

??? 1 必须的: JSF个Sevlet ※必须

?Faces Servlet  : javax.faces.webapp.FacesServlet
??? 2 一个MyFacesServlet,StartupServletContextListener, 不是必须的,删掉也能运行。   

?faces :  org.apache.myfaces.webapp.MyFacesServlet
?Listener:? org.apache.myfaces.webapp.StartupServletContextListener
????? 查了一下代码,这个MyFacesServlet与StartupServletContextListener是配对使用的,用来对有些Container增加Listener。

????? Add listener to myfaces-core.tld instead of web.xml

???? 有些容器不能把Listener加入到tld中,所以必须在web.xml中定义一个MyFacesServlet。所以对Tomcat容器来说这两个可有可无。

????? (参考:  org.apache.myfaces.webapp.StartupServletContextListener的代码

??????????? http://kickjava.com/src/org/apache/myfaces/webapp/MyFacesServlet.java.htm

?      http://kickjava.com/src/org/apache/myfaces/webapp/StartupServletContextListener.java.htm)

??
  3 另外还有一些MyFacesCore用的环境参数。 都不是必须的,删掉也能运行。

??? 所以,就两个Servlet的是必须的。 另外如果使用了Sun JSF RI那么连MyFacesServlet也不用写。

??? (参考:MyFaceCore的环境参数含义

???? http://myfaces.apache.org/core20/myfaces-impl/webconfig.html)

?这样就可以跑jsp的例子了,因为javax.faces.DEFAULT_SUFFIX 默认为.jsp . 所以跑jsp 的时候可以进入FacesServlet。

FaceServlet配置

??? XHTMl只能配合FaceServlet运行。

??? 必须的配置有两个:

???? face-config.xml中,这样jsf不认识的标签,交给facelets去解释。
???? <application>
??????? <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
??? </application>
??? web.xml中增加 , 否则xhtml不被识别。
?? <context-param>
??????? <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
??????? <param-value>.xhtml</param-value>
?? </context-param>
????? 可选的配置:删除也没有关系。

???? web.xml中

  <!-- 开发时检查Page更新的间隔秒数 -->

??? <context-param>
??????? <param-name>facelets.REFRESH_PERIOD</param-name>
??????? <param-value>2</param-value>
??? </context-param>
??? <!-- 异常发生时在网页上显示堆栈信息 -->
??? <context-param>
??????? <param-name>facelets.DEVELOPMENT</param-name>
??????? <param-value>true</param-value>
??? </context-param>

?? 参考: facelets参数设置:   http://homepage1.nifty.com/algafield/dbja01.html

 JSP和XHTML的模板

01.<%@ page contentType="text/html;charset=Shift_JIS" %>??
02.<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>??
03.<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>??
04.<html>??
05.<head><title>YEN to DOLLER</title></head>??
06.<body>??
07.<f:view>??
08.<h2>日本円を米ドルに換算</h2>??
09.<h:form>??
10.日本円を入力して下さい:??
11.<h:inputText id="number" value="#{YenToDoller.yen}"/>??
12.<h:commandButton value="計算"/>??
13.<p>米ドルでは<h:outputText id="output" value="#{YenToDoller.doller}"/>ドルです。??
14.</h:form>??
15.</f:view>??
16.</body>??
17.</html>??


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/srx/archive/2009/12/12/4992947.aspx