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
  


struts-config.xml

<?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");
    }
}

結果

テンプレートがとてもすっきりな気が!
使い方として合っているかは、不明。。。