|
JSF 1.1のサンプルをTomcat5上で動かしてみる |
このページで扱うサンプルは、Backing Bean 1個だけのプログラミングで実装する、
大変簡単なWebアプリケーションです。
Backing Bean (Managed Beanとも言い、両者は同じ意味らしいです)とは、
StrutsでいうアクションフォームBeanみたいなものです。
基本的な処理であれば、アクションに相当するクラスをプログラミングすることなく、
Webアプリケーションを作ることができます。
また、作るJSPページも1つだけです。
つまり、同じJSPに業務処理の入力と処理結果を繰り返し再表示する形になります。
業務パラメータの入力も業務処理結果の出力も、
Backing Beanのプロパティとして格納されます。
ここでは、J2SE SDK 1.4.2_x、Jakarta Tomcat 5.0.xをインストール済みとし、
これらを使います。
-
まず、通常のJ2EE Webアプリケーションと同様、
コンテキストルートに当たるディレクトリ(ここでは"app01"とします)を作り、
その中にWEB-INF、WEB-INF/lib、WEB-INF/classesディレクトリを作ります。
-
JSF 1.1 RI(Reference Implementation)に入っている、次のjarファイルを取り出して、
WEB-INF/libに置きます。
- jsf-api.jar
- jsf-impl.jar
- commons-beanutils.jar
- commons-collections.jar
- commons-digester.jar
- commons-logging.jar
- jstl.jar
- standard.jar
-
Backing Beanを開発します。
ここで開発するアプリケーションは、シンプルながら大変実用的?なものです。
2つの日付をYYYYMMDD形式で入力すると、その間の日数を返すというものです。
入力プロパティは2つの日付、startDateとendDate、
出力プロパティは日数です。日数は普通intなのですが、
画面の表示上、intでは「何も表示しない」ということができないので、
文字列(String)で返すようにしています。
package jsfcl01.beans;
import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PeriodBean implements Serializable {
private String startDate;
private String endDate;
/**
* @return Returns the endDate.
*/
public String getEndDate() {
return endDate;
}
/**
* @param endDate The endDate to set.
*/
public void setEndDate(String endDate) {
this.endDate = endDate;
}
/**
* @return Returns the startDate.
*/
public String getStartDate() {
return startDate;
}
/**
* @param startDate The startDate to set.
*/
public void setStartDate(String startDate) {
this.startDate = startDate;
}
/**
* startDateプロパティの値とendDateプロパティの間の差を日数で返します。
* @return
*/
public String getPeriod(){
if(getStartDate() == null || getEndDate() == null){
return "";
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
long msec;
try {
Date d1 = format.parse(getStartDate());
Date d2 = format.parse(getEndDate());
msec = Math.abs(d1.getTime() - d2.getTime());
} catch(ParseException ex){
return "";
}
return String.valueOf(msec / (24 * 60 * 60 * 1000));
}
}
|
Backing Beanはごく普通のJava Beanです。
但し、サーブレット/APIでいう一般のBean(本来のBeanより決まりが厳格でない)と異なり、
java.io.Serializableを実装する必要があります。
-
次に、作ったBacking Beanを登録します。
これは、次のようなWEB-INF/faces-config.xmlを作って行います。
このファイルには、JSP間のフローも書くのですが、
このアプリケーションでは単一のJSPを毎回再描画するので、それは今回書いていません。
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>Period</managed-bean-name>
<managed-bean-class>jsfcl01.beans.PeriodBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
|
-
そして、WEB-INF/web.xmlは次のようになります。
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
</web-app>
|
JSFでは、Strutsと異なり、JSPカスタムタグのTLD(タグライブラリデスクリプタ)
がJARファイルの中に入っているので、WEB-INFにTLDを配置する必要がありません。
最低限、web.xmlとfaces-config.xmlだけ配置すれば動作します。
なおfaces-config.xmlのファイル名やパスは、web.xmlのFacesServletのパラメータで変更できます。
-
JSPファイルを作ります。
置き場所は通常のJSPと同じくどこでも構いませんが、ここではコンテキストルートに当たる位置に、
そのまま置きます。ファイル名はperiod.jspとでもします。
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head><title>サンプル</title></head>
<body>
<f:view>
<h2>サンプル</h2>
<h:form>
日付1:
<h:inputText id="sdate" value="#{Period.startDate}"/>
〜
日付2:
<h:inputText id="edate" value="#{Period.endDate}"/>
<br/>
<h:commandButton value="計算"/>
<p>日数=<h:outputText id="output" value="#{Period.period}"/></p>
</h:form>
</f:view>
</body>
</html>
|
-
以上で準備は完了です。JSFのサンプルに従うと、
faces/*というURLパターンのときに独自の処理が行われるようになっているので、
ここでもTomcatを起動して、http://localhost/app01/faces/period.jsp
にアクセスして、動作を確認します。
(first uploaded 2004/10/31 last updated 2006/03/15, URANO398)
|