PGBox
P
G
Box

html cancelタグ

htmlタグのメニューへ戻る



使用した環境
JDK 6 Update 11
struts 1.3.10

キャンセル送信ボタン<input type="submit">を出力します。


html:sumitとの違いは、html:cancelでは、入力チェックを行わずにアクションに処理が遷移する点です。
※ このタグの使用は、セキュリティ面で大きな問題を生む可能性があります。PGBoxでは、このタグの使用はあまりお勧めしません。

属性必須意味
property対応するフォームのプロパティ名を指定する。実際にはname="xxx"が出力される。※cancelタグはこの属性値を指定した場合、正しく機能しなくなります。
valueボタンに表示する値を指定する。実際にはvalue="xxx"が出力される。
disabledtrueを指定した場合、無効状態となる。disabled="disabled"が出力される。
style同名の属性値が出力される。
styleClassclass="xxx"が出力される。
styleIdid="xxx"が出力される。
bundleメッセージリソースを取得するリクエスト/セッションバインド名を指定。
alt同名の属性値が出力される。
altKeyaltの値をメッセージリソースから取得する場合に、そのキーを指定する。
title同名の属性値が出力される。
titleKeytitleの値をメッセージリソースから取得する場合に、そのキーを指定する。
lang同名の属性値が出力される。
accesskey同名の属性値が出力される。
tabindex同名の属性値が出力される。
dir同名の属性値が出力される。
onblur同名の属性値が出力される。
onchange同名の属性値が出力される。
onclick同名の属性値が出力される。
ondblclick同名の属性値が出力される。
onfocus同名の属性値が出力される。
onkeydown同名の属性値が出力される。
onkeypress同名の属性値が出力される。
onkeyup同名の属性値が出力される。
onmousedown同名の属性値が出力される。
onmousemove同名の属性値が出力される。
onmouseout同名の属性値が出力される。
onmouseover同名の属性値が出力される。
onmouseup同名の属性値が出力される。


このサンプルで使用しているstruts-configの定義は以下の通りです。
<form-beans>
    <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.9以降では<set-property property="cancellable" value="true"/>の記述が必須です。
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タグは使用せずに、入力チェックをせずに処理したいケースの場合はアクションパス自体を分けてしまうべきです。





htmlタグのメニューへ戻る