リファレンストップへ Java | html cancelタグ使用した環境 JDK 6 Update 11 struts 1.3.10 キャンセル送信ボタン<input type="submit">を出力します。html:sumitとの違いは、html:cancelでは、入力チェックを行わずにアクションに処理が遷移する点です。 ※ このタグの使用は、セキュリティ面で大きな問題を生む可能性があります。PGBoxでは、このタグの使用はあまりお勧めしません。
このサンプルで使用しているstruts-configの定義は以下の通りです。 <form-beans> struts1.2.9以降では<set-property property="cancellable" value="true"/>の記述が必須です。<form-bean name="SampleForm" type="pgbox.form.SampleForm" /> </form-beans> (中略) <action path="/sample" name="SampleForm" type="pgbox.action.SampleAction" validate="true" scope="request"> <set-property property="cancellable" value="true"/> <forward name="success" path="/WEB-INF/view/sample.jsp" /> </action> struts1.2.8以前では必要ありません。 入力チェックが行われたかどうかを確かめるために、以下のようなフォームにします。 public class SampleForm extends ActionForm { @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { System.out.println("#validateが呼ばれました。"); return super.validate(mapping, request); } } JSPでは以下のように記述します。 <html:form action="/sample"> <html:submit value="送信ボタンA" /> <html:cancel value="送信ボタンB" /> </html:form> 送信ボタンAをクリックした場合はコンソールには、入力チェックが呼び出された事が確認できる 「#validateが呼ばれました。」 のメッセージが出力されますが、送信ボタンBをクリックした場合には何も表示されません。 アクションでは、以下のようにしてキャンセルボタンがクリックされたかを判別する事ができます。 public class SampleAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form0, ... if (this.isCancelled(request)) { // キャンセルボタンがクリックされた場合 } else { // サブミットボタンがクリックされた場合 } return mapping.findForward("success"); } } 冒頭でも記述しましたが、このタグを使用した場合、リクエスト改ざんによって、html:cancelを押されてない場合でも入力チェックなしでアクションへ処理が渡される可能性があります。 全てのアクションでthis.isCancelled(request)を使用して適切な対処が行われているなら問題がありませんが、本来であればhtml:cancelタグは使用せずに、入力チェックをせずに処理したいケースの場合はアクションパス自体を分けてしまうべきです。 |
|