从jquery ajax调用action时如何在struts2中进行验证?

时间:2012-01-11 10:29:03

标签: struts2 struts-validation

我从jquery ajax调用struts2动作成功它返回字符串并且在出错时它应该被调度到同一页面并且应该显示错误。我用过以下代码检查..

$(document).ready(function(){
            $('#getActionRs').click(function(){
                alert("call action");
                $.ajax({
                    type:"POST",
                    url: "returnToAjax",
                    data: "firstinput=" +$('#firstinput').val()+"&secondinput=" +$('#secondinput').val(),
                    success: function(msg){
                        alert("success:"+msg);
                    }
                    });
            });
        });

我已经使用上面的代码来调用我的struts动作。按钮onclick这个东西叫做

我在配置文件中指定了我的动作元素,如下所示

<action name="returnToAjax" class="example.returnToAjax">
      <result name="success" type="stream">
         <param name="contentType">text/html</param>
         <param name="inputName">inputStream</param>
      </result>
      <result name="input" type="dispatcher">/Login.jsp</result> 
    </action>

当它返回成功时它正确返回字符串,我已经通过验证xml对此操作进行了一些验证但是当它返回错误时它只显示我的Login.jsp文件代码它不会将它调度到Login.jsp

2 个答案:

答案 0 :(得分:1)

你做的事情根本就是错误的.Ajax意味着在没有刷新页面的情况下进行支持的流程,并让用户留在同一页面上。

你的方法不是在Ajax principal的正确范围内。所以即使你的验证失败,你的动作类控制也会回到你的Jquery代码中的同一个处理程序,因为你指定了Login.jsp作为视图模板,steam结果是选择整个jsp并返回其内容。

如果你想采用相同的方法,只要在验证失败时从Action返回动作名称,并使用JavaScript表单提交功能将用户重定向到输入页面。

答案 1 :(得分:0)

您可以按照以下步骤操作:

  1. 表格提交
  2. 验证错误(通过validation.xml检查)
  3. 将error.jsp作为输入结果传递,其中error.jsp包含一个单词,假设说ERRORPAGE
  4. 你将通过ajax响应得到error.jsp。
  5. 检查响应内容,如果它从ERRORPAGE开始,请执行javascript重定向到login.jsp
  6. 以下是example which does struts2 jquery grid validation through ajax.

    的代码段
    afterSubmit:function(response,postdata){
                      return isError(response.responseText);
                      }
    
    <script type="text/javascript">
                function isError(text){
                    if(text.indexOf('ERRORPAGE')>=0){
                        return [false,text];  //do redirection here something like
                        //window.location="/login.action";
                    }
                    return [true,''];
                }
            </script>