LoginSignup
6
6

More than 5 years have passed since last update.

Struts2-jQueryプラグイン/BootstrapプラグインとAjaxValidation (2013 Winter version)

Last updated at Posted at 2013-12-13

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;
}
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6