ne
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フィールドにセットし、サーブレットでその値を利用する方法です。
どちらの方法でも、ボタンごとに異なる処理をサーブレットで実行できるようになります。