官方主页:http://teeda.seasar.org/ja/
目前,S2JSF也使用Teeda作为JSF的底层API.
如下图所示建立工程:
所需要的lib列表如下:
aopalliance-1.0.jar
commons-collections-3.1.jar
commons-el-1.0.jar
commons-fileupload-1.2.jar
commons-io-1.3.2.jar
commons-lang-2.1.jar
commons-logging-1.1.jar
javassist-3.4.ga.jar
jstl-1.1.2.jar
log4j-1.2.13.jar
ognl-2.6.9-patch-20070624.jar
poi-3.0-FINAL.jar
portlet-api-1.0.jar
s2-extension-2.4.28.jar
s2-framework-2.4.28.jar
teeda-ajax-1.0.13-sp4.jar
teeda-core-1.0.13-sp4.jar
teeda-extension-1.0.13-sp4.jar
xercesImpl-2.6.2.jar
xmlParserAPIs-2.6.2.jar
代码如下:
HelloBean.java
- package com.teeda.bean;
- public class HelloBean {
- private String hello_ = "hello Teeda!";
- public String getHello() {
- return hello_;
- }
- public void setHello(String hello) {
- hello_ = hello;
- }
- }
bundle.dicon
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
- "http://www.seasar.org/dtd/components24.dtd">
- <components>
- <component name="tutorialMessages" class="org.seasar.teeda.core.util.MessageBundle">
- <arg>"tutorialMessages"</arg>
- </component>
- </components>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
- "http://www.seasar.org/dtd/components24.dtd">
- <components>
- <component name="helloDto" class="com.teeda.dto.HelloDto"/>
- </components>
HelloDto.java
- package com.teeda.dto;
- import java.io.Serializable;
- public class HelloDto implements Serializable {
- private static final long serialVersionUID = 1L;
- private String hello_ = "hello Teeda x DI!";
- public String getHello() {
- return hello_;
- }
- public void setHello(String hello) {
- hello_ = hello;
- }
- }
ErrorPageException.java
- package com.teeda.exception;
- public class ErrorPageException extends RuntimeException {
- private static final long serialVersionUID = 1L;
- }
app.dicon
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
- "http://www.seasar.org/dtd/components24.dtd">
- <components>
- <include path="convention.dicon"/>
- <include path="teeda.dicon"/>
- <include path="com/teeda/dicon/bundle.dicon"/>
- <include path="com/teeda/dicon/hello.dicon"/>
- <component
- name="teeda_errorFinder"
- class="org.seasar.teeda.core.util.ErrorMessageFinder"
- instance="application"
- />
- <component
- class="org.seasar.teeda.core.render.autoregister.TeedaRendererComponentAutoRegister">
- <initMethod name="addReferenceClass">
- <arg>@org.seasar.teeda.extension.render.html.HtmlTextRenderer@class</arg>
- </initMethod>
- <initMethod name="addClassPattern">
- <arg>"org.seasar.teeda.extension.render"</arg>
- <arg>"..*Renderer"</arg>
- </initMethod>
- <initMethod name="addIgnoreClassPattern">
- <arg>"org.seasar.teeda.extension.render"</arg>
- <arg>"Abstract..*Renderer"</arg>
- </initMethod>
- </component>
- </components>
convention.dicon
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
- "http://www.seasar.org/dtd/components24.dtd">
- <components>
- <component class="org.seasar.framework.convention.impl.NamingConventionImpl"/>
- </components>
log4j.properties
- log4j.category.org.seasar=DEBUG, C
- log4j.category.com.gargoylesoftware=DEBUG, C
- log4j.category.org.apache.commons.httpclient=INFO, C
- log4j.category.httpclient.wire=INFO, C
- log4j.additivity.org.seasar=false
- log4j.appender.C=org.apache.log4j.ConsoleAppender
- log4j.appender.C.Target=System.out
- log4j.appender.C.ImmediateFlush=true
- log4j.appender.C.layout=org.apache.log4j.PatternLayout
- #log4j.appender.C.layout.ConversionPattern=%-5p %d [%t] %m%n
- log4j.appender.C.layout.ConversionPattern=%-5p %d{ABSOLUTE} [%t] %m%n
teedaCustomize.dicon
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
- "http://www.seasar.org/dtd/components24.dtd">
- <components>
- <component class="org.seasar.teeda.core.render.DefaultComponentIdLookupStrategy" />
- <component class="org.seasar.teeda.core.application.impl.DefaultComponentLookupStrategy" />
- </components>
teedaErrorPage.dicon
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
- "http://www.seasar.org/dtd/components24.dtd">
- <components namespace="teedaErrorPage" >
- <component class="org.seasar.teeda.core.util.ServletErrorPageManagerImpl">
- <initMethod name="addErrorPage">
- <arg>@com.teeda.exception.ErrorPageException@class</arg>
- <arg>"/faces/errorpage/errorPage.jsp"</arg>
- </initMethod>
- </component>
- </components>
tutorialMessages_en.properties
- aaa=ABCDE
- bbb=Foo
tutorialMessages_ja.properties
- aaa=あいうえお
- bbb=ほげ
tutorialMessages.properties
- aaa=ABCDE_default
- bbb=Foo_default
errorpage/errorPage.jsp
- <%@ page contentType="text/html; charset=UTF-8" %>
- <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
- <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
- <html>
- <head>
- <title>errorPage.jsp</title>
- </head>
- <body>
- <f:view>
- error occured.
- </f:view>
- </body>
- </html>
hello/hello.jsp
- <%@ page contentType="text/html; charset=UTF-8" %>
- <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
- <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
- <html>
- <head>
- <title>hello</title>
- </head>
- <body>
- <f:view>
- <h:outputText value="#{helloBean.hello}"/>
- </f:view>
- </body>
- </html>
hello/helloDI.jsp
- <%@ page contentType="text/html; charset=UTF-8" %>
- <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
- <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
- <html>
- <head>
- <title>hello x DI</title>
- </head>
- <body>
- <f:view>
- <h:outputText value="#{helloDto.hello}"/>
- </f:view>
- </body>
- </html>
faces-config.xml
- <?xml version="1.0"?>
- <!DOCTYPE faces-config PUBLIC
- "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
- "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
- <faces-config>
- <application>
- <message-bundle>examples.teeda.message.Messages</message-bundle>
- <locale-config>
- <default-locale>en</default-locale>
- <supported-locale>ja</supported-locale>
- </locale-config>
- </application>
- <lifecycle>
- <phase-listener>org.seasar.teeda.core.event.PhaseChangeTracer</phase-listener>
- </lifecycle>
- <managed-bean>
- <managed-bean-name>helloBean</managed-bean-name>
- <managed-bean-class>com.teeda.bean.HelloBean</managed-bean-class>
- <managed-bean-scope>request</managed-bean-scope>
- </managed-bean>
- </faces-config>
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>
- <context-param>
- <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
- <param-value>.jsp</param-value>
- </context-param>
- <context-param>
- <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
- <param-value>server</param-value>
- </context-param>
- <context-param>
- <param-name>teeda.JAVASCRIPT_NOT_PERMITTED_PATH</param-name>
- <param-value>/link_no_js</param-value>
- </context-param>
- <filter>
- <filter-name>s2filter</filter-name>
- <filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class>
- </filter>
- <filter>
- <filter-name>encodingfilter</filter-name>
- <filter-class>org.seasar.extension.filter.EncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
- <filter>
- <filter-name>extensionfilter</filter-name>
- <filter-class>org.seasar.teeda.extension.filter.ExtensionFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>s2filter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>encodingfilter</filter-name>
- <url-pattern>*.jsp</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>extensionfilter</filter-name>
- <url-pattern>/teedaExtension/*</url-pattern>
- </filter-mapping>
- <servlet>
- <servlet-name>teedaServlet</servlet-name>
- <servlet-class>org.seasar.teeda.core.webapp.TeedaServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet>
- <servlet-name>Faces Servlet</servlet-name>
- <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
- <load-on-startup>2</load-on-startup>
- </servlet>
- <servlet>
- <servlet-name>AjaxServlet</servlet-name>
- <servlet-class>org.seasar.teeda.ajax.AjaxServlet</servlet-class>
- <load-on-startup>3</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>teedaServlet</servlet-name>
- <url-pattern>/teedaServlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>Faces Servlet</servlet-name>
- <url-pattern>/faces/*</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>AjaxServlet</servlet-name>
- <url-pattern>*.ajax</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
- </web-app>
index.html
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>Teeda Example</title>
- </head>
- <body>
- <h1>Welcome to Teeda Example</h1>
- <hr/>
- <div>
- <hr/>
- </div>
- <ul>
- <li>
- <a href="faces/hello/hello.jsp">hello</a><br/>
- </li>
- <li>
- <a href="faces/hello/helloDI.jsp">hello x DI</a><br/>
- </li>
- </ul>
- <div>
- <hr/>
- </div>
- </body>
- </html>
上面的例子包含了一个普通的JSF例子,以及一个使用了Seasar注入的JSF例子。
其实Teeda项目就是在JSF的基础上整合了Seasar的DI功能,框架本身与S2JSF定位基本上是一致的。
如今S2JSF的维护一直处于停滞状态,而Teeda则版本更新很快。可能Teeda才是Seasar团队将来在整合JSF上做出的选择。