Struts2.0.9で1つのFormに複数のSubmitボタンを使う

感想おまちしてます!

1つのFormに複数のSubmitボタンをおきたいときがある。そういうときはbuttonタグとして定義して、Javascriptを使って
Formのaction属性を摩り替える方法をとっていたが、Struts2ではSubmitボタンを2つ配置しても動作してくれる方法がある。

スポンサーリンク

JSPにSubmitボタン2つのFormを記述

一覧系画面は、一覧表示された項目を修正したり、削除するためのボタンが付いていることが多い。

pic20080308_215705

JSPには以下のように記述した。

<s:form>
 <s:submit value="修正" action="usermodinit" />
 <s:submit value="削除" action="userdel" />
</s:form>

struts.xml

usermodinitとuserdelを定義する。userdelはそのまま一覧画面に戻ればいい。usermodinitでは修正するデータを取ってきてActionに設定する初期化処理をする。もう一つusermodでは修正画面で入力したデータで修正を行う。

   <action name="usermodinit"
           class="com.daipresents.struts209.action.UserModAction"
           method="init">
     <result name="success">/WEB-INF/jsp/usermod.jsp</result>
     <result name="input">/error.jsp</result>
     <result name="error">/error.jsp</result>
   </action>
   
   <action name="usermod"
           class="com.daipresents.struts209.action.UserModAction">
     <result name="success">/WEB-INF/jsp/usermod.jsp</result>
     <result name="input">/WEB-INF/jsp/usermod.jsp</result>
     <result name="error">/error.jsp</result>
   </action>
   
   <action name="userdel"
           class="com.daipresents.struts209.action.UserDelAction">
     <result name="success" type="chain">userlist</result>
     <result name="input">/error.jsp</result>
     <result name="error">/error.jsp</result>
   </action>

userdelでは成功時にchainしている。これは、削除後に再度一覧画面のデータを取り直すことが必要だからだ。

このへんの柔軟性がStruts2ではとてもよくなった気がする。