Struts 2 In Action読書ノート1---------簡単なフォーム検証と属性注入


フォームの提出時には、ユーザー名やパスワードが空の場合に検証が必要になることがよくあります.JavaScriptの場合もありますが、もちろん排除しません.
Struts 2を使用します.実際、Struts 2は非常に強力なフォーム検証機能を提供しています.次に、最も簡単なフォーム検証を説明します.
同様に、Struts 2では、フォームがコミットした値をparamsブロッカーによって対応するBeanのプロパティに動的に格納します.
Beanを構築しstruts 2にインスタンス化させ、必要なBeanのプロパティを自動的に注入することで、非常に削減できます.
多くのコード量.
まずはActionコード
package com.bird.chapterTwo;

import com.bird.chapterTwo.bean.User;
import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport{
	private static final long serialVersionUID = 1L;
	private static final String GREETING = "Hello";
	
	
	@Override
	public void validate() {
		if(getUser().getUsername().length()==0){
			addFieldError("user.username", getText("      "));
			
		}
		
		if(getUser().getPassword().length()==0){
			addFieldError("user.password", getText("     "));
			
		}
	}


	@Override
	public String execute() throws Exception {
		user.setUsername(user.getUsername()+GREETING);
		return SUCCESS;
	}

	private User user;

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
}

ここではActionSupportクラスを継承し、検証の方法を便利に使用するためにstruts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <constant name="struts.devMode" value="false" />
	<package name="chapterTwo" namespace="/chapterTwo" extends="struts-default">
		<action name="Name">
			<result>/NameCollector.jsp</result>
		</action>
	
 		<action name="HelloWorld" class="com.bird.chapterTwo.HelloWorld">
 			<result name="success">/chapterTwo/HelloWorld.jsp</result>
 			<result name="input">/NameCollector.jsp</result>
 		</action>
 	</package>
 	

</struts>
必ずそのname=「input」に注意してください.これはフォーム検証に失敗したときに転向したページです.ここでは入力インタフェースに転向させました.
そして入力画面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Name Collector</title>
    
  </head>
  
  <body>
  <h4>Enter Your Name</h4>
  <s:form action="HelloWorld">
  	<s:textfield name="user.username" label="Your Name"></s:textfield>
  	<s:textfield name="user.password" label="Your Password"></s:textfield>
  	<s:submit/>
  </s:form>
  </body>
</html>

ここで注意しなければならないのは、そのname=「user.username」です.このuserはそのuserを指し、このクラスを自動的にインスタンス化することができます.
この属性を注入しました.
最後にインタフェースを表示し、同じ方法で、
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>HelloWorld</title>
    
  </head>
  
  <body>
  <h3>Custom Greeting page</h3>
  <h4><s:property value="user.username"></s:property></h4>
  </body>
</html>

やはりStrutsは強いということが明らかに感じられます.