我已经编写了一个用于调用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>
答案 0 :(得分:0)
更改操作名称:可以使用多个名称多次声明相同的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;)
然后,要在javascript中注入它,请使用<s:url>
(带命名空间,需要IF)和<s:param>
(如果需要)。在您的情况下,您的param在运行时从页面读取,因此您需要使用javascript将其附加到生成的URL:
var url = "<s:url action="recoverPasswordAction" />?email="+email;