Struts2とStruts2-jQuery + Bootstrapプラグインを使ったAjaxValidation
※まずは基本から
必須構成
- Struts 2.3.15.3
- Struts2-jQuery plugin 3.6.1
- Struts2-bootstrap plugin 1.6.x
- Struts2-Convention plugin(アノテーション設定で利用)
下準備
struts.propertiesに以下の記述を追加する
struts.enableJSONValidation=true
Actionクラス
AjaxValidation用のパッケージ&インターセプタスタックを利用する
@ParentPackage("json-default")
@InterceptorRefs({
@InterceptorRef(value="jsonValidationWorkflowStack")
})
JSP
Struts2-jQueryプラグイン用のヘッダ&Struts2-Bootstrapプラグイン用のヘッダを宣言する。
<sj:head compressed="false" ajaxcache="false" jqueryui="true"
locale="ja" debug="true" />
<sb:head includeScripts="true" includeScriptsValidation="true"
includeStylesResponsive="false" />
sb:headのincludeScripts、includeScriptsValidationはtrueにする。
次に送信フォームとボタンの書き方。
送信フォームはStruts2タグのformのお作法。
<s:form id="checkForm" name="checkForm" method="POST" validate="true">
<sj:submit button="true" role="button" name="checkButton" id="checkButton"
validate="true" formIds="checkForm" value="チェックする"
validateFunction="bootstrapValidation" />
</s:form>
s:formにも、sj:submitにも、validate="true"とするのが正しい。
AjaxValidationによるチェックの簡単なフロー
JSP→ActionクラスのValidationだけ行う→結果がJSPに反映→エラーがなければStruts2のJavaScriptが自動的にActionクラスを実行
注意点
1つのs:form内で複数種類の送信先を指定する場合は、単純にhref属性をつけるだけではダメ。
※href属性は現在正しく動かない。
sj:submitのonAfterValidationTopicsで起動するsubscribeを定義して制御すること。
$.subscribe('afterValidation', function(event,data) {
// さまざまなオブジェクトの取得例
var formData = data.form;
console.debug('data:' + data);
console.debug('event' + event.originalEvent);
console.debug('formData' + formData);
.......
// 入力チェックエラーの有無(boolean)
var result = event.originalEvent.formvalidate;
}