Struts2 AJAX验证不需要';Don’别老呆在书页上
我已经尝试了几天使Struts2 AJAX验证工作正常,但我无法解决最后一个问题。我正在使用struts2jquery插件异步提交我的表单:Struts2 AJAX验证不需要';Don’别老呆在书页上,ajax,json,validation,struts2,Ajax,Json,Validation,Struts2,我已经尝试了几天使Struts2 AJAX验证工作正常,但我无法解决最后一个问题。我正在使用struts2jquery插件异步提交我的表单: <div id="result"></div> <s:form action="RegisterUser" theme="xhtml" method="post"> <s:textfield key="firstname" label="First name" size="35"
<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>
我的配置如下所示:
<action name="RegisterUser" class="actions.Register" method="execute">
<interceptor-ref name="jsonValidationWorkflowStack"/>
<result name="input">/pages/Register.jsp</result>
<result type="json"/>
</action>
registerUser()
方法将实际插入数据库。验证XML称为注册验证.XML
。
验证工作正常-如果未填写某些字段,则会显示错误标签,而不会刷新页面。我的问题是,即使操作返回
成功
或错误
,浏览器也会在另一个页面上显示它发送回的JSON,../Register.action。我不知道它为什么不输入我的onSuccess
处理程序。我已经在其他表单上成功地使用了AJAX,唯一的区别是我使用了验证xml和jsonValidationWorkflowStack
拦截器。为什么会发生这种情况?我如何避免被重定向?为什么请求没有到达成功处理程序上的onSuccess
处理程序?您的操作中是否有注册状态的getter
我会发出一个警报(event.originalEvent.data.registrationStatus)
在notifyRegistration
回调函数中,查看其值
顺便说一句,你好像混在一起了
与
AFAIK(但我从未使用过这种特定类型的验证),验证不应该在execute()中处理,而应该在validate()中处理,或者通过XML处理,或者使用注释处理。
Struts2 jQuery插件showcase中的示例使用注释,但您可以轻松地将其转换为XML并尝试showcase
按照下面的示例,您根本不需要使用javascript函数或onSuccessTopic
您也可以在下的Forms->Forms with Validation
下运行它(但请继续阅读代码文档,因为showcase中的代码似乎遗漏了某些部分……例如针对“测试”密码的验证)
<sj:head jqueryui="true" />
$(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>
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;
}