1つのFormに複数のSubmitボタンをおきたいときがある。そういうときはbuttonタグとして定義して、Javascriptを使って
Formのaction属性を摩り替える方法をとっていたが、Struts2ではSubmitボタンを2つ配置しても動作してくれる方法がある。
JSPにSubmitボタン2つのFormを記述
一覧系画面は、一覧表示された項目を修正したり、削除するためのボタンが付いていることが多い。
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ではとてもよくなった気がする。