Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struts2 AJAX验证不需要';Don’别老呆在书页上_Ajax_Json_Validation_Struts2 - Fatal编程技术网

Struts2 AJAX验证不需要';Don’别老呆在书页上

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"

我已经尝试了几天使Struts2 AJAX验证工作正常,但我无法解决最后一个问题。我正在使用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>
我的配置如下所示:

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