struts2重定向到另一个页面

时间:2011-06-21 10:32:37

标签: jquery struts2

当我手动提交表单而不是表单的操作时,我无法使用struts2重定向到另一个页面

我的struts.xml部分

<action name="login" class="com.abc.csm.actions.Login">
         <result type="plainText" name="success"></result>
    </action>
<action name="home">
        <result name="success" type="redirect">/view/Welcome.jsp</result>
    </action>

在index.html上我有一个包含2个字段emailproject id的表单,所以我提交此表单,如

$(function() {
    $("#loginSubmitBtn").click(submitLogin);

    function submitLogin()
    {
        if(validate())
        {
            $.post("/csm/login.action",
              { emailaddress:   document.getElementById("email_id").value,
                projectid:      document.getElementById("project_id").value },
                  function(xml)
                  {
                        if($(xml).find('isSuccess').text()=="true")
                        {
                            sessiontoken=$(xml).find('sessiontoken').text();
                            $.post("/csm/home.action", {
                                sessiontoken:    sessiontoken
                            });
                        }
                  }
            );
}
    }
});

});

在上面的代码中,我试图从服务器端响应中获取sessiontoken,验证登录是否成功,然后将其重定向到/csm/home.action,但我没有被重定向,我正在使用fiddler监视,我可以看到Welcome.jsp的内容(/csm/home.action映射到struts.xml中的Welcome.jsp)作为响应,但没有重定向发生。这里有什么解决方案?感谢

已更新这是有效的,您也可以查看我附加的方式sessiontoken是否正确?

  $('#submitDBtn').click(function(event){
    event.preventDefault();
    if(validate())
    {

        $.post("/csm/login.action",
          { emailaddress:   document.getElementById("email_id").value,
            projectid:      document.getElementById("project_id").value },
              function(xml)
              {
                    if($(xml).find('isSuccess').text()=="true")
                    {
                        sessiontoken=$(xml).find('sessiontoken').text();
                        /*$.post("/csm/home.action", {
                            sessiontoken:    sessiontoken
                        });*/
                        $('#launch').attr('action', '/csm/home.action?sessiontoken='+sessiontoken);
                        $('#launch').submit();
                    }
              }
        );

    }

});

1 个答案:

答案 0 :(得分:1)

尝试这样做

成功而不是

$.post("/csm/home.action", {sessiontoken:sessiontoken});

window.location = "/csm/home.action"+sessiontoken;

abt表单提交

看看这里

http://jquery-howto.blogspot.com/2009/05/disable-submit-button-on-form-submit.html

您可以使用javascript禁用表单的默认行为,然后在一些处理后使用jquery提交表单

http://api.jquery.com/submit/

关于它是否是一个好方法取决于但是我听到并且读到应该避免它...

修改 关于在隐藏字段中发送sessiontoken,就在提交表单之前执行此操作

var hiddenField = document.createElement("input");
    hiddenField.setAttribute("type", "hidden");
    hiddenField.setAttribute("name", "sessiontoken");
    hiddenField.setAttribute("value", sessiontoken);
    var form = document.getElementById("yourFormId");
    form.appendChild(hiddenField);
    $('#formid').submit();