Sler系SEの技術ブログ

ボタンのSubmitで処理分岐 #Struts #Java

kght6123

kght6123

ボタンのSubmitで処理分岐 #Struts #Java

input type="submit"は、valueが表示と値(value)を兼ねているので、

表示される日本語を含む文字が、サーバ側に送信されます。

そのため、日本語でどのボタンが押下されたか判別する必要がありました。

(別途、非表示の値をJavaScriptで修正してSubmitする方法もあります。)

最近のブラウザのbuttonタグでは、サーバへ送信する値(value)とラベルの定義(タグの内容)が完全に別けられており、

ボタンの定義だけで、日本語を含む文字の判定が不要になります。

Strutsは昔のフレームワークですが、まだ一部で広く使われています。。。

<%-- test.jsp --%>
<html:form action="/test">
  <!-- buttonタグでsubmitボタンを記述 -->
  <button type='submit' name='action' value='send'>送信</button>
  <button type='submit' name='action' value='save'>下書き保存</button>
  
  <!-- inputタグでsubmitボタンを記述 -->
  <input type='submit' name='oldAction' value='下書き保存(旧)' />
  
  <html:hidden property="forwardTo" value="xxx"/>
</form>
// TestForm.java
public class TestForm extends ActionForm {
  public String action;
  public String forwardTo;
  
  public String oldAction;
  // --- getter/setterは省略する ---
}
// TestAction.java
public class TestAction extends Action {
  public ActionForward execute(
      final ActionMapping mapping,
      final ActionForm form,
      final HttpServletRequest request,
      final HttpServletResponse response
  ) throws Exception {
    final TestForm testForm = (TestForm)form;
    
    // buttonタグのvalueで判定
    if("send".equals(testForm.getAction())) {
      // 送信ボタンの処理
      // TODO
      return(mapping.findForward(testForm.getForwardTo()));
    } else if("save".equals(testForm.getAction())) {
      // 下書き保存ボタンの処理
      // TODO
      return(mapping.findForward(testForm.getForwardTo()));
    }
    
    // inputのvalueで判定(valueが日本語のとき、日本語で判定する必要がある)
    if("下書き保存(旧)".equals(testForm.getOldAction())) {
      // 下書き保存ボタン(旧)の処理
      // TODO
      return(mapping.findForward(testForm.getForwardTo()));
    }
  }
}