サンプル解説
teeda-exmapleのプログラムを順に解説します。
実際に動作するサンプルを参考に、teeda coreの使い方を学習しましょう。
hello.jsp
helloDI.jsp
addDI.jsp
ブラウザで、http://localhost:8080/teeda-example/faces/hello/hello.jspにアクセスしてみましょう。
hello Teeda!と表示されるはずです。このサンプルでは、次のことを学びます。
それでは、通常のJSFの例のHTMLの中身を見てみましょう。
01:<%@ page contentType="text/html; charset=UTF-8" %>
02:<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
03:<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
04:<html>
05:<head>
06:<title>hello</title>
07:</head>
08:<body>
09:<f:view>
10: <h:outputText value="#{helloBean.hello}"/>
11:</f:view>
12:</body>
13:</html>
10行目のhelloBeanというJavaBeansはWEB-INF/faces-config.xmlで設定されています。
それでは、該当個所を見てみましょう。
<managed-bean>
<managed-bean-name>helloBean</managed-bean-name>
<managed-bean-class>examples.teeda.bean.HelloBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
これは通常のJSFと同じですね。examples.teeda.bean.HelloBeanクラスをリクエストスコープでhelloBeanという名前で設定しています。
ブラウザで、http://localhost:8080/teeda-example/faces/hello/helloDI.jspにアクセスしてみましょう。
hello Teeda x DI!と表示されるはずです。このサンプルでは、次のことを学びます。
それでは、DIを使用した例のHTMLの中身を見てみましょう。
01:<%@ page contentType="text/html; charset=UTF-8" %>
02:<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
03:<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
04:<html>
05:<head>
06:<title>hello x DI</title>
07:</head>
08:<body>
09:<f:view>
10: <h:outputText value="#{helloDto.hello}"/>
11:</f:view>
12:</body>
13:</html>
これは先ほどのhello.jspとほとんど変わらないと思います。大きな違いは、10行目のhelloDtoがdiconファイルに定義されている部分です。
それでは、helloDtoが定義されているhello.diconを見てみましょう。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component name="helloDto" class="examples.teeda.dto.HelloDto"/>
</components>
examples.teeda.dto.HelloDtoクラスをhelloDtoという名前で設定しています。
Teedaでは、JSFで扱うJavaBeansをS2Containerに管理させる事が可能なのです。
このサンプルでは、次のことを学びます。
- 入力値をJavaBeansのプロパティと連動させる方法。
- ボタンをクリックしたときにJavaBeansのメソッドを呼び出す方法。
- Actionにsetterメソッドを定義してリクエスト、セッション、S2Containerのオブジェクトをプロパティに自動設定する方法。
それでは、HTMLの中身を見てみましょう。
01:<%@ page contentType="text/html; charset=UTF-8" %>
02:<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
03:<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
04:<html>
05:<head>
06: <title>add x DI</title>
07:</head>
08:<body>
09:<f:view>
10: <h:form>
11: <h:messages globalOnly="false" showDetail="true"/>
12: <h:inputText value="#{addDto.arg1}" required="true"/> +
13: <h:inputText value="#{addDto.arg2}" required="true"/> =
14: <h:outputText value="#{addDto.result}"/>
15: <h:commandButton action="#{addAction.calculate}" value="calculate"/>
16: </h:form>
17:</f:view>
18:</body>
19:</html>
12行目の<h:inputText value="#{addDto.arg1}" required="true"/>で、
入出力用のタグとJavaBeansのプロパティを連動させています。
入力した値は、バリデーションがOKならJavaBeansのプロパティに格納され、
NGの場合は入力された値がそのままページに表示されることになります。
addDtoはどこで定義されているのでしょうか。addDtoは、examples/jsf/dicon/add.diconの中で、次のように定義されています。
<component name="addDto" class="examples.teeda.dto.AddDto" instance="request"/>
instance属性がrequestなので、addDtoはrequestスコープで管理されることになります。
また、add.diconはルートの定義であるapp.diconから次のようにincludeされています。
<include path="examples/teeda/dicon/add.dicon"/>
15行目の<h:commandButton action="#{addAction.calculate}" value="calculate"/>で、
ボタンがクリックされたときにJavaBeansのメソッドを呼び出す設定をしています。
ボタンやリンクのaction属性で、#{変数名.メソッド名}のように記述することをMethodBindingと呼びます。
MethodBindingで呼び出されるメソッドは、引数がなく、戻り値がStringでなければいけません。
addActionはadd.diconで次のように定義されています。
<component name="addAction" class="examples.teeda.action.impl.AddActionImpl" instance="request"/>
|