Struts + Maya(0.9.0)
Struts と Maya を組み合わせて「こんにちはサンプル」を作ってみた。
web.xml
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">CharacterEncodingFilter filter.CharacterEncodingFilter encoding Windows-31J CharacterEncodingFilter /* action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml MayaServlet org.seasar.maya.standard.MayaServlet specification /WEB-INF/default.maya MayaServlet *.html action *.do index.html
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
Struts の taglib を使う為に、default.maya に taglib 定義。
ここで、ちょっとハマル。
web.xml の taglib は今のところ見てないみたい。
WEB-INF/lib にある jar内の「META-INF/**/*.tld」を探してますね。
というわけで、
default.maya
<maya> <taglib prefix="html" uri="http://jakarta.apache.org/struts/tags-html"/> <taglib prefix="logic" uri="http://jakarta.apache.org/struts/tags-logic"/> <taglib prefix="bean" uri="http://jakarta.apache.org/struts/tags-bean"/> </maya>
これで、Struts の taglib が使用可能。
こういうわけで、web.xml に taglib なし。(使わないので)
あえて JSTL 使わずに。
hello.html
<html> <head> <meta http-equiv="Content-type" content="text/html; charset=Windows-31J"/> <title>こんにちは with Maya</title> </head> <body> <form id="helloForm" action="index.html" method="POST"> お名前:<input type="text" name="name" id="name"/> <input type="submit" value="送信"/> <br/> <span id="displayNamePresent"> <span id="displayNameNotEmpty"> <span id="displayName">○○</span> さん、こんにちは </span> </span> </form> <span id="forErrors"><span id="errorMessage">ここにエラーメッセージが表示されます</span></span> <hr/> <a href="../index.html" id="topLink">戻る</a> </body> </html>
hello.maya
<?xml version="1.0" encoding="Shift_JIS"?> <maya> <tag id="helloForm" inject="html:form"> <binding name="action" value="/hello"/> <binding name="method" value="POST"/> </tag> <tag id="name" inject="html:text"> <binding name="property" value="name"/> <binding name="size" value="15"/> </tag> <tag id="forErrors" inject="html:messages"> <binding name="message" value="false"/> <binding name="id" value="message"/> </tag> <tag id="errorMessage" inject="bean:write"> <binding name="name" value="message"/> </tag> <tag id="displayNamePresent" inject="logic:present"> <binding name="name" value="displayName"/> </tag> <tag id="displayNameNotEmpty" inject="logic:notEmpty"> <binding name="name" value="displayName"/> </tag> <tag id="displayName" inject="bean:write" replace="false"> <binding name="name" value="displayName"/> </tag> <tag id="topLink" inject="html:link"> <binding name="page" value="/index.html"/> </tag> </maya>
HelloForm.java
package hello; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.ValidatorForm; public class HelloForm extends ValidatorForm { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
HelloAction.java
package hello; 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; public class HelloAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HelloForm helloForm = (HelloForm) form; request.setAttribute("displayName", "***" + helloForm.getName() + "***"); return mapping.findForward("success"); } }
テンプレートがとてもすっきりな気が!
使い方として合っているかは、不明。。。