いろんなJava Webフレームワークで同じ画面を作ってみる(Stripes編)
いろんなJava Webフレームワークで同じ画面を作ってみる(Stripes編)です。
お題は、こちら。
- 公式サイト: Home - Stripes - Stripes Framework
- バージョン: 1.5.3
日本では、(海外でも?)マイナーなフレームワークな感じですが、結構好きな感じです。
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <filter> <display-name>Stripes Filter</display-name> <filter-name>StripesFilter</filter-name> <filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class> <init-param> <param-name>ActionResolver.Packages</param-name> <param-value>webapp.action</param-value> </init-param> <init-param> <param-name>LocalePicker.Locales</param-name> <param-value>en_US:UTF-8,ja:UTF-8</param-value> </init-param> </filter> 省略 </web-app>
とりあえず、設定すべきところは、ActionResolver.Packages で、ベースとなるアクションパッケージを指定します。
AddActionBean
package webapp.action; import net.sourceforge.stripes.action.ActionBean; import net.sourceforge.stripes.action.ActionBeanContext; import net.sourceforge.stripes.action.DefaultHandler; import net.sourceforge.stripes.action.DontValidate; import net.sourceforge.stripes.action.ForwardResolution; import net.sourceforge.stripes.action.HandlesEvent; import net.sourceforge.stripes.action.Resolution; import net.sourceforge.stripes.validation.Validate; public class AddActionBean implements ActionBean { @Validate(required = true) private Integer arg1; @Validate(required = true) private Integer arg2; private Integer result; private ActionBeanContext context; @DontValidate @DefaultHandler public Resolution init() { return new ForwardResolution("/WEB-INF/jsp/input.jsp"); } @HandlesEvent("submit") public Resolution submit() { result = arg1 + arg2; return new ForwardResolution("/WEB-INF/jsp/result.jsp"); } public Integer getArg1() { return arg1; } public void setArg1(Integer arg1) { this.arg1 = arg1; } public Integer getArg2() { return arg2; } public void setArg2(Integer arg2) { this.arg2 = arg2; } public Integer getResult() { return result; } public void setResult(Integer result) { this.result = result; } public ActionBeanContext getContext() { return context; } public void setContext(ActionBeanContext context) { this.context = context; } }
バリデーションもsetter,getterじゃなくフィールドに指定できるのでいい感じ。
@HandlesEventは、デフォルトでメソッド名を拾ってくれるとうれしいところですが。
綺麗な仕様だと思います。
input.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>input</title> </head> <body> <stripes:errors/> <stripes:form beanclass="webapp.action.AddActionBean"> arg1: <stripes:text name="arg1"/><stripes:errors field="arg1"/><br/> +<br/> arg2: <stripes:text name="arg2"/><stripes:errors field="arg2"/><br/> <stripes:submit name="submit" value="Submit" /> </stripes:form> </body> </html>
result.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>result</title> </head> <body> result: <c:out value="${actionBean.result}"/> </body> </html>
あとクラスパス上に、StripesResources.properties を配置。
JSTL使いたいので、jstl-1.1.2.jar, jakarta-taglibs-standard-1.1.2.jar を入れた。
WebWorksよりこいつがStrutsになるべきだった?
以上