【问题标题】:How to do validation in struts2 when calling action from jquery ajax?从jquery ajax调用动作时如何在struts2中进行验证?
【发布时间】:2012-01-11 10:29:02
【问题描述】:

我从 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 of button 这个东西被调用了

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

<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

【问题讨论】:

    标签: struts2 struts-validation


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨,感谢回答,但是,我正在通过 xml 进行验证,所以它只返回输入,所以我应该从哪里返回动作名称...
    • @swan:在这种情况下可以尝试其他答案中提到的内容
    【解决方案2】:

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

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

    这是example which does struts2 jquery grid validation through ajax.的代码sn-p

    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>
    

    【讨论】:

    • 老实说永远不会赞成这种方法:)虽然它很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2012-09-09
    • 2012-07-29
    相关资源
    最近更新 更多