日系框架之seasar2(S2Struts)
来源:互联网 发布:python 字典的嵌套 编辑:程序博客网 时间:2024/04/20 07:17
官方主页:http://s2struts.seasar.org/ja/ ,目前v1.3版本也在开发中。
对比SAStruts(http://blog.csdn.net/kunshan_shenbin/archive/2008/11/04/3220007.aspx),使用Html模板引擎Mayaa(http://mayaa.seasar.org/)是它的优点。
如下图所示建立工程结构:
所使用的lib包列表如下:
aopalliance-1.0.jar
commons-beanutils-1.7.0.jar
commons-digester-1.6.jar
commons-fileupload-1.0.jar
commons-logging-1.0.4.jar
commons-validator-1.1.4.jar
hsqldb.jar
javassist-3.0.jar
jaxen-1.1-beta-9.jar
jta.jar
log4j-1.2.8.jar
mayaa-1.0.7.jar
nekohtml-0.9.5.jar
ognl-2.6.5.jar
oro-2.0.8.jar
rhino-1.6r2.jar
s2-dao-1.0.47.jar
s2-extension-2.3.23.jar
s2-framework-2.3.23.jar
s2-struts-1.2.12.jar
s2-struts-tiger-1.2.12.jar
struts-1.2.9.jar
xercesImpl-2.7.1.jar
xml-apis-1.3.jar
代码依次如下所示:
AddAction.java
- package org.seasar.struts.examples.add;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts.action.Action;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.action.ActionForward;
- import org.apache.struts.action.ActionMapping;
- import org.seasar.struts.examples.form.CalculationForm;
- public class AddAction extends Action {
- @Override
- public ActionForward execute(
- ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response) {
- CalculationForm calForm = (CalculationForm) form;
- int result = addService_.add(calForm.getArg1(), calForm.getArg2());
- calForm.setResult(result);
- return (mapping.findForward("success"));
- }
- private AddService addService_;
- public AddAction(AddService addService) {
- addService_ = addService;
- System.out.println("created new AddAction");
- }
- }
AddService.java
- package org.seasar.struts.examples.add;
- public interface AddService {
- public int add(int arg1, int arg2);
- }
AddServiceImpl.java
- package org.seasar.struts.examples.add;
- public class AddServiceImpl implements AddService {
- public int add(int arg1, int arg2) {
- return arg1 + arg2;
- }
- }
Add.dicon
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components21.dtd">
- <components>
- <component class="org.seasar.struts.examples.add.AddServiceImpl"/>
- </components>
RequestProcessor.dicon
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components21.dtd">
- <components>
- <include path="s2struts.dicon"/>
- <component class="org.seasar.struts.processor.S2RequestProcessor" instance="prototype">
- <aspect pointcut="process">
- <component class="org.seasar.struts.examples.interceptor.MeasureTimeInterceptor"/>
- </aspect>
- <aspect pointcut="processActionForm">
- <component class="org.seasar.struts.interceptors.ProcessPojoFormInterceptor"/>
- </aspect>
- </component>
- </components>
CalculationForm.java
- package org.seasar.struts.examples.form;
- import org.apache.struts.action.ActionForm;
- public class CalculationForm extends ActionForm {
- private static final long serialVersionUID = 7914771274544612470L;
- private int arg1_;
- private int arg2_;
- private int result_;
- public CalculationForm() {
- }
- public int getArg1() {
- return arg1_;
- }
- public void setArg1(int arg1) {
- arg1_ = arg1;
- }
- public int getArg2() {
- return arg2_;
- }
- public void setArg2(int arg2) {
- arg2_ = arg2;
- }
- public int getResult() {
- return result_;
- }
- public void setResult(int result) {
- result_ = result;
- }
- @Override
- public String toString() {
- return "arg1=" + arg1_ + " arg2=" + arg2_ + " result=" + result_;
- }
- }
- package org.seasar.struts.examples.interceptor;
- import java.util.Date;
- import javax.servlet.http.HttpServletRequest;
- import org.aopalliance.intercept.MethodInterceptor;
- import org.aopalliance.intercept.MethodInvocation;
- public class MeasureTimeInterceptor implements MethodInterceptor {
- public Object invoke(MethodInvocation invocation) throws Throwable {
- Date start = new Date();
- Object ret = invocation.proceed();
- Object[] args = invocation.getArguments();
- HttpServletRequest request = (HttpServletRequest)args[0];
- String message = request.getServletPath() + " : Time = "
- + (new Date().getTime() - start.getTime()+ " milliseconds");
- System.out.println(message);
- return ret;
- }
- }
aop.dicon
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components.dtd">
- <components namespace="aop">
- <component name="traceInterceptor"
- class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>
- <component name="traceThrowsInterceptor"
- class="org.seasar.framework.aop.interceptors.TraceThrowsInterceptor"/>
- </components>
app.dicon
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components21.dtd">
- <components>
- <include path="org/seasar/struts/examples/dicon/RequestProcessor.dicon"/>
- <include path="s2struts.dicon"/>
- <include path="org/seasar/struts/examples/dicon/Add.dicon"/>
- </components>
application.properties资源文件,可根据实际情况修改。
- # -- standard errors --
- errors.header=<UL>
- errors.prefix=<LI>
- errors.suffix=</LI>
- errors.footer=</UL>
- # -- validator --
- errors.invalid={0} is invalid.
- errors.maxlength={0} can not be greater than {1} characters.
- errors.minlength={0} can not be less than {1} characters.
- errors.range={0} is not in the range {1} through {2}.
- errors.required={0} is required.
- errors.required.other={0} is required ({1}).
- errors.byte={0} must be an byte.
- errors.date={0} is not a date.
- errors.double={0} must be an double.
- errors.float={0} must be an float.
- errors.integer={0} must be an integer.
- errors.long={0} must be an long.
- errors.short={0} must be an short.
- errors.creditcard={0} is not a valid credit card number.
- errors.email={0} is an invalid e-mail address.
- errors.url={0} is an invalid url (web address).
- errors.minbytelength={0} can not be less than {1} bytes.
- errors.maxbytelength={0} can not be greater than {1} bytes.
- # -- other --
- errors.cancel=Operation cancelled.
- errors.detail={0}
- errors.general=The process did not complete. Details should follow.
- errors.token=Request could not be completed. Operation is not in sequence.
- # -- business --
- errors.bad.criteria=Corresponding data to the retrieval condition is not found
- errors.employee.exist=Employee({0}) already exist
- # -- exception --
- errors.global.runtime=System error.
- errors.global.runtime.sql=You need to run WEB-INF/bin/runHsqldb.bat.
- ######
- # -- other --
- #
- #
- # -- welcome --
- #
- welcome.title=Struts Blank Application
- welcome.heading=Welcome!
- welcome.message=To get started on your own application, copy the struts-blank.war to a new WAR file using the name for your application. Place it in your container's "webapp" folder (or equivalent), and let your container auto-deploy the application. Edit the skeleton configuration files as needed, restart your container, and you are on your way! (You can find the application.properties file with this message in the /WEB-INF/src/java/resources folder.)
- sample.title=S2Struts Sample Calculate Application
- mod.title=S2Struts Mod Application
- add.title=S2Struts Add Application
- subtract.title=S2Struts Subtract Application
- multiply.title=S2Struts Multiply Application
- divide.title=S2Struts Divide Application
- echo.title=S2Struts Echo Application
- changeCase.title=S2Struts ChangeCase Application
- calc=calculate
- result.title=S2Struts Application Result
- resultresult=result
- echoecho=echo
- toUpperCasetoUpperCase=toUpperCase
- toLowerCasetoLowerCase=toLowerCase
- system.back=back
- system.error=error
- #
- form.mod.arg1=ARG1
- form.mod.arg2=ARG2
- message.title=Message Example
- examplemessage=ExampleMessage. {0} {1} {2} {3}
- validate.title=Validate Example
- validatevalidate=validate
- validate.required=RequiredValue
- validate.required.other=RequiredOtherMessageValue
- mustendcom={0} must end 'com'
- uploadupload=upload
- upload.title=Upload Example
- downloaddownload=download
- download.title=Download Example
- indexedindexed=indexed
- indexed.title=Indexed Example
- iterationiteration=iteration
- iteration.title=Iteration Example
- iteration.title.list=Iteration Example - List
- iteration.title.create=Iteration Example - Create
- iteration.title.edit=Iteration Example - Edit
- iteration.title.delete=Iteration Example - Delete
- ######
- # -- employee --
- #
- #
- # -- title --
- #
- title.error=ERROR
- title.employee=Employee Management
- title.employee.search=Search
- title.employee.list=List
- title.employee.create=Create
- title.employee.update=Edit
- title.employee.delete=Delete
- title.employee.inquire=Inquire
- #
- # -- button --
- #
- button.prev=previous
- button.next=next
- button.create=create
- button.search=search
- button.edit=edit
- button.delete=delete
- button.inquire=inquire
- button.confirm=confirm
- button.store=store
- button.back=back
- #
- # -- form --
- #
- form.detail=Detail
- #
- form.employee=Employee
- form.employee.no=EmployeeNo
- form.employee.name=EmployeeName
- form.employee.job=Job
- form.employee.manager=Manager
- form.employee.hiredate=HireDate
- form.employee.salary=Salary
- form.employee.commission=Commission
- #
- form.department=Department
- #
- #
- #
- messages.select.space=Please select
j2ee.dicon
- <?xml version="1.0" encoding="Shift_JIS"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components.dtd">
- <components namespace="j2ee">
- <component name="transactionManager"
- class="org.seasar.extension.jta.TransactionManagerImpl"/>
- <component name="requiredTx"
- class="org.seasar.extension.tx.RequiredInterceptor"/>
- <component name="requiresNewTx"
- class="org.seasar.extension.tx.RequiresNewInterceptor"/>
- <component name="mandatoryTx"
- class="org.seasar.extension.tx.MandatoryInterceptor"/>
- <component name="notSupportedTx"
- class="org.seasar.extension.tx.NotSupportedInterceptor"/>
- <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
- <component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
- <!--
- <component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>
- <component class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
- -->
- <!--
- <component name="xaDataSource"
- class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <property name="driverClassName">
- "oracle.jdbc.driver.OracleDriver"
- </property>
- <property name="URL">
- "jdbc:oracle:thin:@xxx:xxx:xxx"
- </property>
- <property name="user">"xxx"</property>
- <property name="password">"xxx"</property>
- </component>
- <component name="xaDataSource"
- class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <property name="driverClassName">
- "org.postgresql.Driver"
- </property>
- <property name="URL">
- "jdbc:postgresql://localhost/TEST"
- </property>
- <property name="user">"xxxx"</property>
- <property name="password">"xxxx"</property>
- </component>
- <component name="xaDataSource"
- class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <property name="driverClassName">
- "net.sourceforge.jtds.jdbc.Driver"
- </property>
- <property name="URL">
- "jdbc:jtds:sqlserver://localhost/TEST;instance=SQLEXPRESS"
- </property>
- <property name="user">"xxxx"</property>
- <property name="password">"xxxx"</property>
- </component>
- -->
- <component name="xaDataSource"
- class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <property name="driverClassName">
- "org.hsqldb.jdbcDriver"
- </property>
- <property name="URL">
- "jdbc:hsqldb:hsql://localhost:9001"
- </property>
- <property name="user">"sa"</property>
- <property name="password">""</property>
- </component>
- <component name="connectionPool"
- class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
- <property name="timeout">600</property>
- <property name="maxPoolSize">10</property>
- <!-- JTAトランザクションが開始されていない場合にコネクションを
- 取得できないようにするには次のプロパティをfalseにしてください.-->
- <property name="allowLocalTx">true</property>
- <destroyMethod name="close"/>
- </component>
- <component name="dataSource"
- class="org.seasar.extension.dbcp.impl.DataSourceImpl"/>
- <!-- WebLogic
- <component name="initialContext" class="javax.naming.InitialContext"/>
- <component name="transactionManager"
- class="org.seasar.extension.j2ee.JndiTransactionManager">
- <arg>initialContext</arg>
- <arg>"javax.transaction.TransactionManager"</arg>
- </component>
- <component
- class="org.seasar.extension.j2ee.JndiDataSource">
- <arg>initialContext</arg>
- <arg>"jndiName"</arg>
- </component>
- -->
- <!-- WebSphere 4
- <component name="initialContext" class="javax.naming.InitialContext"/>
- <component name="transactionManager"
- class="org.seasar.extension.j2ee.SingletonTransactionManager">
- <arg>"com.ibm.ejs.jts.jta.JTSXA"</arg>
- <arg>"getTransactionManager"</arg>
- </component>
- <component
- class="org.seasar.extension.j2ee.JndiDataSource">
- <arg>initialContext</arg>
- <arg>"jndiName"</arg>
- </component>
- -->
- <!-- WebSphere 5
- <component name="initialContext" class="javax.naming.InitialContext"/>
- <component name="transactionManager"
- class="org.seasar.extension.j2ee.SingletonTransactionManager">
- <arg>"com.ibm.ejs.jts.jta.TransactionManagerFactory"</arg>
- <arg>"getTransactionManager"</arg>
- </component>
- <component
- class="org.seasar.extension.j2ee.JndiDataSource">
- <arg>initialContext</arg>
- <arg>"jndiName"</arg>
- </component>
- -->
- <!-- JBoss
- <component name="initialContext" class="javax.naming.InitialContext"/>
- <component name="transactionManager"
- class="org.seasar.extension.j2ee.JndiTransactionManager">
- <arg>initialContext</arg>
- <arg>"java:/TransactionManager"</arg>
- </component>
- <component
- class="org.seasar.extension.j2ee.JndiDataSource">
- <arg>initialContext</arg>
- <arg>"jndiName"</arg>
- </component>
- -->
- <!-- Oracle10gAS
- <component name="initialContext" class="javax.naming.InitialContext"/>
- <component name="transactionManager"
- class="org.seasar.extension.j2ee.JndiTransactionManager">
- <arg>initialContext</arg>
- <arg>"java:comp/UserTransaction"</arg>
- </component>
- <component
- class="org.seasar.extension.j2ee.JndiDataSource">
- <arg>initialContext</arg>
- <arg>"jndiName"</arg>
- </component>
- -->
- </components>
log4j.properties
- #log4j.category.org.apache.struts=DEBUG, C
- log4j.category.org.apache.commons.validator=ERROR
- log4j.category.org.seasar=DEBUG, 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.rootLogger=INFO, A1
- log4j.appender.A1=org.apache.log4j.ConsoleAppender
- log4j.appender.A1.layout=org.apache.log4j.PatternLayout
- log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
global.css
- body {
- padding:0;
- background:#FFFFFF;
- }
- td, th {
- font-size: small;
- }
- .title {
- font-size: large;
- font-weight: bold;
- color: #5671A0;
- }
- .small {
- font-size: 70%;
- color: white;
- }
- .small a, small a:visited {
- color: white;
- }
- .smalltitle {
- font-size: small;
- font-weight: bold;
- color: #5671A0;
- }
- .toolbar {
- padding: 4px;
- background-color: #7694C8;
- }
- .tablebg {
- background-color: #EEF3FB;
- }
- .oddRow, .row-1 {
- background-color: #FFFFFF;
- }
- .evenRow, .row-0 {
- background-color: #EEF3FB;
- }
- .left {
- text-align: left;
- }
- .right {
- text-align: right;
- }
- .box {
- border: thin solid #7694C8;
- }
- .label {
- background-color: #ffffcc;
- }
- .display {
- display: inline;
- }
- .notdisplay {
- display: none;
- }
- .level0 {
- }
- .level1 {
- }
- .body {
- margin-left:188px;
- }
- .header {
- padding:4px;
- }
- .menu {
- background:#FC0;
- padding:0;
- position:absolute;
- width:120px;
- top:145px;
- }
- .text {
- text-align: left;
- }
- .number {
- text-align: right;
- }
- .date {
- text-align: left;
- }
- .error {
- background-color: red;
- }
- .text-error {
- background-color: red;
- text-align: left;
- }
- .number-error {
- background-color: red;
- text-align: right;
- }
- .date-error {
- background-color: red;
- text-align: left;
- }
execute.js
- //
- //
- //
- function go(inputTag, action) {
- if (action != null) {
- inputTag.form.action = inputTag.form.action.replace(///[^//]*$/, action);
- }
- inputTag.form.method.value=inputTag.name;
- }
layout.html
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=Windows-31j">
- <link href="../../css/global.css" rel="stylesheet" type="text/css" id="globalStyle"></link>
- <script type="text/javascript" src="../../js/execute.js" id="executeJs"></script>
- <title id="pageTitle">
- S2Struts Sample
- </title>
- </head>
- <body>
- <table border="0" cellspacing="5" width="97%">
- <tr>
- <td colspan="2">
- <div id="header">
- <img src="../../images/seasar.gif">
- </div>
- </td>
- </tr>
- <tr>
- <td width="200" valign="top">
- <div id="navigation">
- <ul>
- <li><a href="#">MENU 1</a></li>
- <li><a href="#">MENU 2</a></li>
- <li><a href="#">MENU 3</a></li>
- </ul>
- </div>
- </td>
- <td valign="top" align="left">
- <div id="layoutBody">
- DUMMY
- </div>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <hr/>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div id="footer">
- The Seasar Project
- </div>
- </td>
- </tr>
- </table>
- </body>
- </html>
layout.mayaa
- <?xml version="1.0" encoding="Shift_JIS"?>
- <m:mayaa xmlns:m="http://mayaa.seasar.org"
- xmlns:html="http://struts.apache.org/tags-html">
- <m:echo id="globalStyle">
- <m:attribute name="href" value="${contextPath}/css/global.css" />
- </m:echo>
- <m:echo id="executeJs">
- <m:attribute name="src" value="${contextPath}/js/execute.js" />
- </m:echo>
- <m:insert id="pageTitle" name="title" replace="false" />
- <m:insert id="layoutBody" name="content" replace="false" />
- <m:insert id="navigation" replace="false"
- path="/pages/layout/menu.html" name="menu" />
- <html:img m:id="header" page="/images/seasar.gif" m:replace="false"/>
- <!-- ignored ids -->
- <m:ignore id="footer" />
- </m:mayaa>
menu.html
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=Windows-31j">
- <link href="../../css/global.css" rel="stylesheet" type="text/css"></link>
- <script type="text/javascript" src="../../js/execute.js"></script>
- <title>
- S2Struts Sample Menu
- </title>
- </head>
- <body>
- <div id="menuBody">
- <ul>
- <li><a href="#" id="addPage">S2Struts Add Application</a></li>
- </ul>
- </div>
- </body>
- </html>
menu.mayaa
- <?xml version="1.0" encoding="Shift_JIS"?>
- <m:mayaa xmlns:m="http://mayaa.seasar.org"
- xmlns:html="http://struts.apache.org/tags-html"
- xmlns:bean="http://struts.apache.org/tags-bean"
- m:noCache="true">
- <m:doRender id="menuBody" name="menu"/>
- <html:link m:id="addPage" page="/pages/addInput.html"><bean:message key="add.title"/></html:link>
- </m:mayaa>
addInput.html
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=Windows-31j">
- <link href="../../css/global.css" rel="stylesheet" type="text/css"></link>
- <script type="text/javascript" src="../../js/execute.js"></script>
- <title id="pageTitle">
- S2Struts Add Application Demo
- </title>
- </head>
- <body>
- <div id="appBody">
- <div id="errorMessage"></div>
- <form method="GET" action="result.html" id="appForm">
- <input name="arg1" type="text"> +
- <input name="arg2" type="text">
- <input type="submit" value="calculate" id="goCalc">
- </form>
- </div>
- </body>
- </html>
addInput.mayaa
- <?xml version="1.0" encoding="Shift_JIS"?>
- <m:mayaa xmlns:m="http://mayaa.seasar.org"
- xmlns:html="http://struts.apache.org/tags-html"
- xmlns:bean="http://struts.apache.org/tags-bean"
- m:noCache="true"
- m:extends="/pages/layout/layout.html">
- <m:doRender id="pageTitle" name="title">
- <bean:message key="add.title"/>
- </m:doRender>
- <m:doRender id="appBody" name="content"/>
- <html:errors m:id="errorMessage" />
- <html:form m:id="appForm" action="/add" focus="arg1" />
- <html:submit m:id="goCalc" ><bean:message key="calc"/></html:submit>
- </m:mayaa>
result.html
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=Windows-31j">
- <link href="../../css/global.css" rel="stylesheet" type="text/css"></link>
- <script type="text/javascript" src="../../js/execute.js"></script>
- <title id="pageTitle">
- S2Struts Application Result Demo
- </title>
- </head>
- <body>
- <div id="appBody">
- <div id="resultMessage">
- result:100
- </div>
- </div>
- </body>
- </html>
result.mayaa
- <?xml version="1.0" encoding="Shift_JIS"?>
- <m:mayaa xmlns:m="http://mayaa.seasar.org"
- xmlns:html="http://struts.apache.org/tags-html"
- xmlns:bean="http://struts.apache.org/tags-bean"
- m:noCache="true"
- m:extends="/pages/layout/layout.html">
- <m:doRender id="pageTitle" name="title">
- <bean:message key="result.title"/>
- </m:doRender>
- <m:doRender id="appBody" name="content"/>
- <div m:id="resultMessage">
- <bean:message key="result"/>:<bean:write name="calcForm" property="result"/>
- </div>
- </m:mayaa>
struts-config.xml
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE struts-config PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
- "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
- <struts-config>
- <form-beans>
- <form-bean name="calcForm" type="org.seasar.struts.examples.form.CalculationForm"/>
- </form-beans>
- <action-mappings>
- <action
- path="/add"
- type="org.seasar.struts.examples.add.AddAction"
- name="calcForm"
- scope="request"
- validate="false"
- input="/pages/addInput.html">
- <forward name="success" path="/pages/result.html" />
- </action>
- </action-mappings>
- <controller processorClass="org.seasar.struts.processor.S2RequestProcessor"/>
- <message-resources parameter="application"/>
- <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
- <set-property property="pathnames"
- value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
- </plug-in>
- <plug-in className="org.seasar.struts.plugin.AutoStrutsConfigRegisterPlugIn">
- <set-property property="enableJar" value="false"/>
- <set-property property="docRoot" value="/pages"/>
- </plug-in>
- </struts-config>
tiles-defs.xml
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE tiles-definitions PUBLIC
- "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
- "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
- <!--
- This is a blank Tiles definition file with a commented example.
- -->
- <tiles-definitions>
- <!-- sample tiles definitions
- <definition name=".mainLayout" path="/common/layouts/classicLayout.jsp">
- <put name="title" value="Sample Page Title" />
- <put name="header" value="/common/header.jsp" />
- <put name="menu" value=".mainMenu" />
- <put name="footer" value="/common/footer.jsp" />
- <put name="body" value=".portal.body" />
- </definition>
- <definition name=".mainMenu" path="/common/layouts/vboxLayout.jsp" >
- <putList name="list" >
- <add value=".menu.links" />
- <add value=".menu.taglib.references" />
- <add value=".menu.printer.friendly" />
- <add value=".menu.old.documents" />
- </putList>
- </definition>
- <definition name="aPage" extends=".mainLayout">
- <put name="title" value="Another Title" />
- <put name="body" value=".aPage.body" />
- </definition>
- end samples -->
- <definition name="${YOUR_DEFINITION_HERE}"></definition>
- </tiles-definitions>
validation.xml
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE form-validation PUBLIC
- "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
- "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
- <form-validation>
- <!--
- <formset>
- <form name="logonForm">
- <field
- property="username"
- depends="required">
- <arg key="logonForm.username"/>
- </field>
- <field
- property="password"
- depends="required,mask">
- <arg key="logonForm.password"/>
- <var>
- <var-name>mask</var-name>
- <var-value>^[0-9a-zA-Z]*$</var-value>
- </var>
- </field>
- </form>
- </formset>
- -->
- </form-validation>
validator-rules.xml
- <!DOCTYPE form-validation PUBLIC
- "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
- "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
- <!--
- This file contains the default Struts Validator pluggable validator
- definitions. It should be placed somewhere under /WEB-INF and
- referenced in the struts-config.xml under the plug-in element
- for the ValidatorPlugIn.
- <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
- <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
- /WEB-INF/validation.xml"/>
- </plug-in>
- These are the default error messages associated with
- each validator defined in this file. They should be
- added to your projects ApplicationResources.properties
- file or you can associate new ones by modifying the
- pluggable validators msg attributes in this file.
- # Struts Validator Error Messages
- errors.required={0} is required.
- errors.minlength={0} can not be less than {1} characters.
- errors.maxlength={0} can not be greater than {1} characters.
- errors.invalid={0} is invalid.
- errors.byte={0} must be a byte.
- errors.short={0} must be a short.
- errors.integer={0} must be an integer.
- errors.long={0} must be a long.
- errors.float={0} must be a float.
- errors.double={0} must be a double.
- errors.date={0} is not a date.
- errors.range={0} is not in the range {1} through {2}.
- errors.creditcard={0} is an invalid credit card number.
- errors.email={0} is an invalid e-mail address.
- errors.url={0} is an invalid url (web address).
- errors.minbytelength={0} can not be less than {1} bytes.
- errors.maxbytelength={0} can not be greater than {1} bytes.
- Note: Starting in Struts 1.2.0 the default javascript definitions have
- been consolidated to commons-validator. The default can be overridden
- by supplying a <javascript> element with a CDATA section, just as
- in struts 1.1.
- -->
- <form-validation>
- <global>
- <validator name="required"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateRequired"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- msg="errors.required"/>
- <validator name="requiredif"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateRequiredIf"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- msg="errors.required"/>
- <validator name="validwhen"
- msg="errors.required"
- classname="org.apache.struts.validator.validwhen.ValidWhen"
- method="validateValidWhen"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"/>
- <validator name="minlength"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateMinLength"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.minlength"
- jsFunction="org.apache.commons.validator.javascript.validateMinLength"/>
- <validator name="maxlength"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateMaxLength"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.maxlength"
- jsFunction="org.apache.commons.validator.javascript.validateMaxLength"/>
- <validator name="mask"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateMask"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.invalid"/>
- <validator name="byte"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateByte"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.byte"
- jsFunctionName="ByteValidations"/>
- <validator name="short"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateShort"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.short"
- jsFunctionName="ShortValidations"/>
- <validator name="integer"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateInteger"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.integer"
- jsFunctionName="IntegerValidations"/>
- <validator name="long"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateLong"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.long"/>
- <validator name="float"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateFloat"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.float"
- jsFunctionName="FloatValidations"/>
- <validator name="double"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateDouble"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.double"/>
- <validator name="date"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateDate"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.date"
- jsFunctionName="DateValidations"/>
- <validator name="intRange"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateIntRange"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends="integer"
- msg="errors.range"/>
- <validator name="floatRange"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateFloatRange"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends="float"
- msg="errors.range"/>
- <validator name="doubleRange"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateDoubleRange"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends="double"
- msg="errors.range"/>
- <validator name="creditCard"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateCreditCard"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.creditcard"/>
- <validator name="email"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateEmail"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.email"/>
- <validator name="url"
- classname="org.apache.struts.validator.FieldChecks"
- method="validateUrl"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.url"/>
- <validator name="minbytelength"
- classname="org.seasar.struts.validator.FieldChecks"
- method="validateMinByteLength"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.minbytelength"/>
- <validator name="maxbytelength"
- classname="org.seasar.struts.validator.FieldChecks"
- method="validateMaxByteLength"
- methodParams="java.lang.Object,
- org.apache.commons.validator.ValidatorAction,
- org.apache.commons.validator.Field,
- org.apache.struts.action.ActionMessages,
- org.apache.commons.validator.Validator,
- javax.servlet.http.HttpServletRequest"
- depends=""
- msg="errors.maxbytelength"/>
- <!--
- This simply allows struts to include the validateUtilities into a page, it should
- not be used as a validation rule.
- -->
- <validator name="includeJavaScriptUtilities"
- classname=""
- method=""
- methodParams=""
- depends=""
- msg=""
- jsFunction="org.apache.commons.validator.javascript.validateUtilities"/>
- </global>
- </form-validation>
web.xml
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <!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>
- <display-name>Struts Application</display-name>
- <filter>
- <filter-name>s2filter</filter-name>
- <filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class>
- </filter>
- <filter>
- <filter-name>s2strutsfilter</filter-name>
- <filter-class>org.seasar.struts.filter.S2StrutsFilter</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>Windows-31j</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>s2filter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>s2strutsfilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>encodingfilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <servlet>
- <servlet-name>s2container</servlet-name>
- <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <!-- Standard Action Servlet Configuration (with debugging) -->
- <servlet>
- <servlet-name>action</servlet-name>
- <servlet-class>org.seasar.struts.servlet.S2ActionServlet</servlet-class>
- <init-param>
- <param-name>config</param-name>
- <param-value>/WEB-INF/struts-config.xml</param-value>
- </init-param>
- <init-param>
- <param-name>debug</param-name>
- <param-value>2</param-value>
- </init-param>
- <init-param>
- <param-name>detail</param-name>
- <param-value>2</param-value>
- </init-param>
- <load-on-startup>2</load-on-startup>
- </servlet>
- <servlet>
- <servlet-name>MayaaServlet</servlet-name>
- <servlet-class>org.seasar.mayaa.impl.MayaaServlet</servlet-class>
- <load-on-startup>3</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>s2container</servlet-name>
- <url-pattern>/s2container</url-pattern>
- </servlet-mapping>
- <!-- Standard Action Servlet Mapping -->
- <servlet-mapping>
- <servlet-name>action</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>MayaaServlet</servlet-name>
- <url-pattern>*.html</url-pattern>
- </servlet-mapping>
- <!-- The Usual Welcome File List -->
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
debug.js
- /* set true/false */
- var debug = true;
- if (debug) {
- load("dump.js");
- }
default.mayaa
- <?xml version="1.0" encoding="UTF-8"?>
- <m:mayaa xmlns:m="http://mayaa.seasar.org">
- <m:beforeRender><![CDATA[
- var contextPath = request.getContextPath();
- var println = function(value) {
- if (value != null) {
- java.lang.System.out.println(value);
- } else {
- java.lang.System.out.println("" + value);
- }
- };
- load("debug.js");
- ]]></m:beforeRender>
- </m:mayaa>
dump.js
- function printAttribute(req) {
- var names = req.getAttributeNames();
- while (names.hasMoreElements()) {
- var name = names.nextElement();
- print("att: " + name + " = " + req.getAttribute(name));
- }
- }
- function printParameter(req) {
- var names = req.getParameterNames();
- while (names.hasMoreElements()) {
- var name = names.nextElement();
- print("prm: " + name + " = " + req.getParameter(name));
- }
- }
- function printSession(session) {
- var names = session.getAttributeNames();
- while (names.hasMoreElements()) {
- var name = names.nextElement();
- print("ses: " + name + " = " + session.getAttribute(name));
- }
- }
- function print(value) {
- java.lang.System.out.println("" + value);
- }
- var req = request.getUnderlyingContext();
- print("------ req-path: " + request.getRequestedPath());
- printParameter(req);
- printAttribute(req);
- printSession(req.getSession());
index.html
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <html>
- <head>
- <link href="../../css/global.css" rel="stylesheet" type="text/css"></link>
- <script type="text/javascript" src="../../js/execute.js"></script>
- <title id="pageTitle">
- S2Struts Sample Calculate Application Demo
- </title>
- </head>
- <body>
- <div id="appBody">
- </div>
- </body>
- </html>
index.mayaa
- <?xml version="1.0" encoding="Shift_JIS"?>
- <m:mayaa xmlns:m="http://mayaa.seasar.org"
- xmlns:bean="http://struts.apache.org/tags-bean"
- m:noCache="true"
- m:extends="/pages/layout/layout.html">
- <m:doRender id="pageTitle" name="title">
- <bean:message key="sample.title"/>
- </m:doRender>
- <m:doRender id="appBody" name="content"/>
- </m:mayaa>
- 日系框架之seasar2(S2Struts)
- 日系框架之seasar2(S2JDBC)
- 日系框架之seasar2(S2DAO)
- 日系框架之seasar2(S2Hibernate3)
- 日系框架之seasar2(S2JSF)
- 日系框架之seasar2(SAStruts)
- 日系框架之seasar2(S2JPA之Hibernate3)
- 日系框架之seasar2(S2JPA之TopLink)
- 日系框架之seasar2(S2JPA之OpenJPA)
- 日系框架之Seasar2之SQL注释大坑-yellowcong
- 日系框架之seasar2(S2JDBC) -----使用HSQLDB
- 日系框架之seasar2(Teeda:S2JSF的孪生兄弟)
- 日系框架之seasar2(Teeda支援HTML模板)
- 日系框架之seasar2(SAStruts)升级篇
- SeaSar2之struts2+ seasar2 + s2dao框架整合-yellowcong
- 开源框架 Seasar2
- 开源框架 Seasar2
- Seasar2 框架学习笔记
- javascript 实现 select手动输入
- 小程序说明
- 关于电子书(CHM)无法打开的解决方法
- 人物传记-牛根生
- 值得一生回味的
- 日系框架之seasar2(S2Struts)
- Io 异常: The Network Adapter could not establish the connection
- 日本科学家成功克隆冷冻16年死亡老鼠引争议(图)
- hibernate annotations OneToMany与ManyToOne 分析 以及延迟加载性能分析
- IBM DB2学习笔记:日期以及时间的使用
- sql游标
- 罚金与罚款的区别 ?
- 图像在rgb和lab空间之间的转换
- Linux动态链接库的创建与使用