【JavaScript】テクニック(Struts2)

java側の定数を使う

// 定義方法
<%@ page import="org.apache.struts2.ServletActionContext"%>
<%@ page import="com.opensymphony.xwork2.util.ValueStack"%>
<%@ page import="呼び出すクラス(例.jp.co.~.Define)"%>
<% ValueStack stack = ServletActionContext.getValueStack(request);
    stack.set("使う名前", "定数名");
    stack.set("states", "Define.STATES_CD");
%>

// 使い方
<s:if test="~~ == states">

確認ボックス表示からのaction(struts2)を動かす

ボタンは2つあって処理をわける場合

<ボタン側>

<s: if test="~ == 1">
    <input type="button" value="ボタン名1" id="ボタンのID" onclick="confirmChangeState();">
</s:if>
<s: if test="~ == 2">
    <input type="button" value="ボタン名2" id="ボタンのID" onclick="confirmChangeState();">
</s:if>

<ボタン押下処理>

<script language="JavaScript" type="text/javascript">
<!--
    <%-- 2度押し防止用 --%>
    var doneSubmit = false;

    function confirmChangeRefundState() {
        var changeStateFlg = false;
        var updateState = "0";
    
        <%-- 2度押し防止 --%>
        if (doneSubmit) {
            return;
        }
        
        <%-- 確認メッセージ表示(条件が1のとき) --%>
        <s:if test="~~~ == 1">
            changeStateFlg = confirm("確認メッセージ1");
            updateState = "0";
        </s:if>

        <%-- 確認メッセージ表示(条件が2のとき) --%>        
        <s:elseif test="~~~ == 2">
            changeStateFlg = confirm("確認メッセージ2");
            updateState = "1";
        </s:elseif>
        
        doneSubmit = true;
        
        if (changeStateFlg) {
            <%-- 連続更新を防ぐため、ボタンを非表示にする--%>
            document.getElementById('ボタンのID').disabled = true;
            document.forms[1].action = "実行するアクション名(例.registPayment_updateState__)" + updateState + ".action";
            document.forms[1].submit();
        } else {
            <%-- キャンセルしたので、ボタン押下可能 --%>
            doneSubmit = false;
        }
    }
// -->
</script>

struts.xml

<action name="registPayment_*__*" class="jp.~.offerDetailAction" method="{1}">
    <param name="processMode">{2}</param>
    <result name="~">/~.jsp</result>
</action>

actionクラス

private String processMode;

public String getProcessMode() {
    return processMode;
}
public void setProcessMode(String processMode) {
    this.processMode = processMode;
}

public String updateState() {
    // 渡した値を取得
    String state = getProcessMode();
    // 渡した値に応じて処理を行う
    if (state.equals(1)) {
    }
}