追加/更新の為のアクション
追加/更新の為の事前確認機能を含めたアクションの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; } }
<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>