Struts2 AJAX 検証を機能させるために数日間試みてきましたが、最後の 1 つの問題を解決できません。struts2jquery プラグインを使用して、フォームを非同期的に送信しています。
<div id="result"></div>
<s:form action="RegisterUser" theme="xhtml" method="post">
<s:textfield key="firstname" label="First name" size="35"
required="true" />
<s:textfield key="lastname" label="Last name" size="35"
required="true" />
<s:textfield key="address" label="Address" size="35"
required="true" />
<s:textfield key="phone" label="Phone number" size="35" />
<s:textfield key="username" label="Username" size="35"
required="true" />
<s:password key="password" label="Password" size="35"
required="true" />
<s:textfield key="email" label="E-mail address" size="35"
required="true" />
<sj:submit key="Inregistrare" targets="result" align="right"
button="true" validate="true" onSuccessTopics="notifyRegistration" />
</s:form>
必要なスクリプトを含めました。
<script type="text/javascript" src="./js/registerScript.js"></script>
<!-- This files are needed for AJAX Validation of XHTML Forms -->
<script src="${pageContext.request.contextPath}/struts/utils.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/struts/xhtml/validation.js"
type="text/javascript"></script>
およびタグ:
<sj:head jqueryui="true" />
onSuccess ハンドラー:
$(document).ready(function(){
$.subscribe('notifyRegistration', function(event,data) {
var registrationStatus = event.originalEvent.data.registrationStatus;
if(registrationStatus == 'SUCCESS'){
alert('Contul dumneavoastra a fost creat cu success!');
window.location.href = "./index.html";
} else {
alert('Contul dumneavoastra nu a putut fi creat. Va rugam incercati din nou.');
}
});
});
私の構成は次のようになります。
<action name="RegisterUser" class="actions.Register" method="execute">
<interceptor-ref name="jsonValidationWorkflowStack"/>
<result name="input">/pages/Register.jsp</result>
<result type="json"/>
</action>
そして、私のアクション クラスの execute メソッド:
public String execute() throws Exception {
if (isInvalid(getUsername()) || isInvalid(getPassword())
|| isInvalid(getEmail())) {
registrationStatus = REGISTRATION_ERROR;
}
if (registerUser()) {
registrationStatus = REGISTRATION_SUCCESS;
return SUCCESS;
}else {
registrationStatus = REGISTRATION_ERROR;
}
return SUCCESS;
}
このregisterUser()
メソッドは、データベースへの実際の挿入を行います。検証 XML は と呼ばれRegister-Validation.xml
ます。検証は正常に機能します。一部のフィールドが入力されていない場合、ページを更新せずにエラー ラベルが表示されます。私の問題は、アクションがSUCCESS
orを返す場合ERROR
でも、ブラウザが別のページ ../Register.action に送り返した JSON を表示することです。onSuccess
ハンドラーに入らない理由がわかりません。私は他のフォームで AJAX を正常に使用しました。ここでの唯一の違いは、検証 xml とjsonValidationWorkflowStack
インターセプターを使用することです。これはなぜですか? また、リダイレクトされないようにするにはどうすればよいですか? onSuccess
リクエストがハンドラーに届かないのはなぜですか?