Open1

ne

nama29nama29

formタグ内にボタンが2つあり、それぞれのボタンが押されたときにサーブレットで異なる値を受け取りたい場合、ボタンごとに異なるパラメータをサーブレットに送信する方法があります。

以下の方法を使うと、どちらのボタンが押されたかをサーブレットで判別でき、適切な値を変数にセットできます。

方法1: name属性を使ってサーブレットで判別

各ボタンに異なるname属性を設定し、サーブレット側でそのname属性の存在を確認します。

JSPの例

<form action="${pageContext.request.contextPath}/adduser" method="POST">

<input type="text" name="username" placeholder="ユーザー名">

<!-- ボタンごとに異なるname属性を設定 -->
<button type="submit" name="action" value="save">保存</button>
<button type="submit" name="action" value="delete">削除</button>

</form>

•	name="action"と異なるvalue:各ボタンに同じname(action)を指定し、それぞれのボタンに異なるvalue(saveまたはdelete)を指定します。

サーブレット側の処理例

サーブレットでrequest.getParameter("action")を使ってボタンのvalueを取得し、どちらのボタンが押されたかを判別します。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");

if ("save".equals(action)) {
    // 「保存」ボタンが押されたときの処理
    System.out.println("保存処理を実行");
    // 必要な変数に値をセット
} else if ("delete".equals(action)) {
    // 「削除」ボタンが押されたときの処理
    System.out.println("削除処理を実行");
    // 必要な変数に値をセット
}

// その他の処理

}

方法2: JavaScriptを使ってボタンごとに異なる値を送信

JavaScriptでクリックイベントを使い、ボタンによって異なる値をhiddenフィールドに設定する方法もあります。

JSPの例

<form action="${pageContext.request.contextPath}/adduser" method="POST">
<input type="text" name="username" placeholder="ユーザー名">
<input type="hidden" name="action" id="actionField" value="">

<!-- ボタンごとに異なるonclickイベントを設定 -->
<button type="submit" onclick="setAction('save')">保存</button>
<button type="submit" onclick="setAction('delete')">削除</button>

</form>

<script>
function setAction(action) {
document.getElementById('actionField').value = action;
}
</script>

•	ボタンがクリックされたときに、JavaScript関数setActionでhiddenフィールドactionFieldの値を変更します。

サーブレット側の処理例

サーブレット側ではhiddenフィールドのactionの値を確認します。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");

if ("save".equals(action)) {
    // 「保存」ボタンが押されたときの処理
    System.out.println("保存処理を実行");
} else if ("delete".equals(action)) {
    // 「削除」ボタンが押されたときの処理
    System.out.println("削除処理を実行");
}

// その他の処理

}

まとめ

•	方法1では、各ボタンに異なるnameとvalueを設定し、サーブレットで判別する簡単な方法です。
•	方法2では、JavaScriptを使ってクリックされたボタンに応じた値をhiddenフィールドにセットし、サーブレットでその値を利用する方法です。

どちらの方法でも、ボタンごとに異なる処理をサーブレットで実行できるようになります。