Struts2 + Jquery 库 - 此 AJAX 调用出了什么问题?
我正在尝试使用 Struts2 和 JQuery 库进行 ajax 调用。这是jsp的代码:
<s:div id="my_result" >
Nothing
</s:div>
<s:form action="UserManager" theme="simple">
<s:textfield name="nickname" />
<s:password name="password" />
<s:label cssClass="menu_span">
<sj:submit targets="my_result" value="Login" />
</s:label>
</s:form>
这是带有xml的bean/action的代码:
public class UserManager extends ActionSupport {
private String nickname;
private String password;
@Override
public String execute() throws Exception {
String output="i have insered "+this.getNickname()+" and "+this.getPassword();
System.out.println(output);
return output;
}
public String getNickname() { return nickname; }
public void setNickname(String newValue) { nickname=newValue; }
public String getPassword() { return password; }
public void setPassword(String newValue) { password=newValue; }
}
<package name="model" extends="struts-default">
<action name="UserManager" class="model.UserManager">
<result>index.jsp</result>
</action>
</package>
如果我在UserManager bean上返回SUCCESS,它会加载到相同的my_result
上呼叫页面。否则,如果我返回输出
,我会得到消息:
消息(昵称=aaa,密码=bbb)。
没有为操作模型定义结果。UserManager 和结果我已插入 aaa 和 bbb
发生了什么事?我怎样才能返回该字符串?我认为这是一个 struts.xml 错误
干杯
更新
public class UserManager extends ActionSupport { 私有字符串昵称; 私有字符串密码; 私有字符串错误;
@Override
public String execute() throws Exception {
error="i have insered "+this.getNickname()+" and "+this.getPassword();
return SUCCESS;
}
public String getNickname() { return nickname; }
public void setNickname(String newValue) { nickname=newValue; }
public String getPassword() { return password; }
public void setPassword(String newValue) { password=newValue; }
public String getError() { return error; }
public void setError(String newValue) { error=newValue; }
}
<s:div id="my_result" >
<s:property value="error" />
</s:div>
<s:form action="UserManager" theme="simple">
<s:textfield name="nickname" />
<s:password name="password" />
<s:label cssClass="menu_span">
<sj:submit targets="my_result" value="Login" />
</s:label>
</s:form>
更新2
<package name="model" extends="json-default">
<action name="UserManager" class="model.UserManager">
<result type="json" />
</action>
</package>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您在execute() 方法中返回的返回值必须是映射为值之一。
由于您没有这样的结果名称:
它将使用默认名称:“成功”。您必须在execute() 方法中返回“成功”值。
执行方法的结果值是映射的结果的名称。要发送消息,您必须在 Action 中添加 String 属性(以及获取它的 getter),并在执行方法中执行类似
编辑:如何使用 ajax 获取消息:
如果您在操作中的名为“String message”的属性中设置了消息,并且您有该属性的 getter (public String getMessage()),则可以通过访问 ajax 调用中获取的对象中的此属性来获取此信息。如果您使用 jquery 进行 ajax 调用,您可以通过以下方式获取它:
编辑:
在包标记的 struts xml 中,您必须定义 json 类型:
并添加可以下载的 json-plugin.jar 此处
更多信息位于 http://code. google.com/p/jsonplugin/wiki/Documentation
The return value that you return in the execute() method must be one of the mapped as values.
As you have not a result name like this:
It will use the default one: "success". You have to return "success" value in execute() method.
The result value of the execute method is the name of the result mapped. To send a message you have to add a String attribute in your Action (and a getter to obtain it), and in the execute method do something like
Edit: how to get the message with ajax:
If you have set the message in your action in an attribute called "String message" and you have a getter for that attribute (public String getMessage()) you can get this information accesing this property in the object you get in the ajax call. If you do the ajax call for example with jquery you can get it in this way:
Edit:
In the struts xml in your package tag you have to define the json type:
and add the json-plugin.jar which can be downloaded here
more info in http://code.google.com/p/jsonplugin/wiki/Documentation