追加/更新の為のアクション

追加/更新の為の事前確認機能を含めたアクションのJAVAコードは次のような感じで行こうと思う。
HTTPやSESSIONなんちゃらとかの汚染がないすっきり(しすぎ)のコード
※ParamUtilはなんでもないUtilityクラス
また、一覧、削除のアクションは別アクションクラスに分ける

tutorial.UserAction.java

package tutorial;

import java.util.Map;

import jp.co.hershe.struts2.util.ParamUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.acegisecurity.annotation.Secured;
import org.apache.struts2.interceptor.ParameterAware;
import org.apache.struts2.interceptor.validation.SkipValidation;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

/**
 * Struts2 アクションクラス
 * 
 * @author mikuni
 *
 */
public class UserAction extends ActionSupport implements ModelDriven, Preparable, ParameterAware {
	private static final long serialVersionUID = 1870444428158165140L;
	static Log log = LogFactory.getLog(UserAction.class);
	ParamUtil u;
	UserDAO dao;
	User	user = null;
	boolean preread = false;
	
	// 事前読み込みを行うかどうかをアクションのパラメータとして渡してもらう
	public void setPreread( String on ) {
		preread = "true".equals(on);
	}
	
	// Inject by Spring
	public UserAction(UserDAO dao) {
		this.dao = dao;
	}
	// ParameterAware
	public void setParameters(Map p) {
		u = new ParamUtil(p);
	}

	// Prepareable
	public void prepare() throws Exception {
		if (preread) {
			int id = u.getInt("id",0);
			if (id != 0) {
				user = dao.get( id );
			}
		}
		if (user==null) {
			user = new User();
		}
	}
	// ModelDriven
	public User getModel() {
		return user;
	}
	
	@SkipValidation
	public String doNothing() {
		return SUCCESS;
	}
	public String doCheck() {
		return SUCCESS;
	}
	public String doUpdate() {
		dao.update(user);
		return SUCCESS;
	}
	public String doAdd() {
		dao.insert(user);
		return SUCCESS;
	}
}

struts.xml は次のとおり

<package name="MemberArea" extends="MyDefault">
        <default-interceptor-ref name="transactauth_chk"/>
        
        <global-results>
            <result name="login" type="redirect-action">require_login</result>
        </global-results>

        <action name="user_edit" class="UserAction" method="doNothing">
	   <param name="preread">true</param>
            <result>/edit.jsp</result>
        </action>
        <action name="user_new" class="UserAction" method="doNothing">
            <result>/edit.jsp</result>
        </action>
        <action name="user_add_pre" class="UserAction" method="doCheck">
            <result>/editconf.jsp</result>
            <result name="input">/edit.jsp</result>
        </action>
        <action name="user_add" class="UserAction" method="doAdd">
            <result type="redirect-action">user_list</result>
            <result name="input">/edit.jsp</result>
        </action>
        <action name="user_update_pre" class="UserAction" method="doCheck">
	   <param name="preread">true</param>
            <result>/editconf.jsp</result>
            <result name="input">/edit.jsp</result>
        </action>
        <action name="user_update" class="UserAction" method="doUpdate">
	   <param name="preread">true</param>
            <result type="redirect-action">user_list</result>
            <result name="input">/edit.jsp</result>
        </action>
</package>

2007-11-28 struts.xml中のdoNotingをdoNothingに修正しました