3

我从 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

4

2 回答 2

1

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

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

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

于 2012-01-11T10:45:52.980 回答
0

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

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

这是通过 ajax 进行 struts2 jquery 网格验证的示例的代码片段。

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>
于 2012-01-11T18:00:01.633 回答