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

How to do validation in struts2 when calling action from jquery ajax?

我从 jquery ajax 调用 struts2 操作,成功时返回字符串,出错时应分派到同一页面并应显示错误。我使用了以下代码检查它..

1
2
3
4
5
6
7
8
9
10
11
12
13
$(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 of button 这个东西被称为

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

1
2
3
4
5
6
      <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


您做的事情根本上是错误的。Ajax 意味着在不刷新页面的情况下执行支持的进程并让用户停留在同一页面上。

您的方法不在 Ajax 主体的正确范围内。因此,即使您的操作类控件验证失败,也会返回到 Jquery 代码中的相同处理程序,并且由于您已将 Login.jsp 指定为查看模板,蒸汽结果正在挑选整个 jsp 并返回其内容。

如果您想使用相同的方法,只需在验证失败时从操作返回操作名称,然后使用 JavaScript 表单提交功能将用户重定向到输入页面。


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

  • 表单提交
  • 验证错误(通过validation.xml检查)
  • 将 error.jsp 作为输入结果传递,其中 error.jsp 包含一个单词,假设说 ERRORPAGE
  • 您将通过 ajax 响应获得 error.jsp。
  • 检查响应内容,如果它从 ERRORPAGE 开始,执行 javascript 重定向到 login.jsp
  • 这是通过 ajax 进行 struts2 jquery 网格验证的示例代码片段。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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,''];
                }