| ## サンプル解説 teeda-exmapleのプログラムを順に解説します。 実際に動作するサンプルを参考に、teeda coreの使い方を学習しましょう。 hello.jsp helloDI.jsp addDI.jsp ## hello.jsp ブラウザで、http://localhost:8080/teeda-example/faces/hello/hello.jspにアクセスしてみましょう。 hello Teeda!と表示されるはずです。このサンプルでは、次のことを学びます。 Teedaによる通常のJSFの例。 それでは、通常の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という名前で設定しています。 ## helloDI.jsp ブラウザで、http://localhost:8080/teeda-example/faces/hello/helloDI.jspにアクセスしてみましょう。 hello Teeda x DI!と表示されるはずです。このサンプルでは、次のことを学びます。 TeedaによるDIを使用したJSFの例。 それでは、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に管理させる事が可能なのです。 ## addDI.jsp このサンプルでは、次のことを学びます。 入力値を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"/>
| Copyright© 2005-2006, The Seasar Foundation and the others. All rights reserved.