Struts2网址没有达到正确的操作

时间:2014-02-18 02:57:25

标签: ajax struts2

我已经编写了一个用于调用struts2动作的ajax调用,默认情况下它会执行execute方法,但不会用于struts.xml中定义的任何方法。请告诉我如何在javascript中形成url以使用struts.xml中定义的方法调用正确的操作

代码:

 function showCustomer(str) {
    emailRequest = createRequest();
    if (emailRequest == null){
        alert("Unable to create request");
        }else{
        var emailValue = document.getElementById("email").value;
        var email = escape(emailValue); 
        alert(email)
        var url= "recoverPassword!recoverPassword?email="+email;
        alert(url)
        emailRequest.onreadystatechange = showemailStatus;
        emailRequest.open("POST", url, true);
        emailRequest.send(null);
    }
}

function showemailStatus() {
    if (emailRequest.readyState == 4) {
        if (emailRequest.status == 200) {
            if (emailRequest.responseText.match("EamilIdExists")) {
                document.getElementById("show").style.display='block';
            } else {
                    document.getElementById("email").focus();
                    alert("Email id doesnot exist");
                    return;
            }
        }
    }
}

struts.xml中:

 <action name="recoverPassword" class="com.astro.action.CheckEmailAction" method="recoverPassword">
            <result type="stream" name="success">
                <param name="contentType">text/html</param>
                <param name="inputName">inputStream</param>
            </result>
            <result type="stream" name="input">
                <param name="contentType">text/html</param>
                <param name="inputName">inputStream</param>
            </result>
        </action>

1 个答案:

答案 0 :(得分:0)

  1. 更改操作名称:可以使用多个名称多次声明相同的Action类,使用(和不使用)不同的方法。当您更改名称时,您不必再使用爆炸!字符(动态方法调用,您必须在struts.xml上显式激活,才能带来安全性问题,所以最好避免它)

    然后你可以

    <action class = "com.astro.action.CheckEmailAction" 
             name = "recoverPasswordAction" 
           method = "recoverPassword">
    ...
    

    <action class = "com.astro.action.CheckEmailAction" 
             name = "doSomethingElseAction" 
           method = "doSomethingElse">
    ...
    

    (永远记住,一个动作不应该执行太多不同的逻辑&#34;动作&#34;)

  2. 然后,要在javascript中注入它,请使用<s:url>(带命名空间,需要IF)和<s:param>(如果需要)。在您的情况下,您的param在运行时从页面读取,因此您需要使用javascript将其附加到生成的URL:

    var url = "<s:url action="recoverPasswordAction" />?email="+email;