我正在尝试使用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:/ / p>的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上return SUCCESS
,则会在my_result
加载相同的调用页面。否则,如果我return output
我得到Messages:
消息(昵称= aaa和密码= bbb)。
No result defined for action model.UserManager and result i have insered aaa and bbb
发生了什么事?我怎么能返回那个字符串?我认为这是一个struts.xml错误
干杯
更新
公共类UserManager扩展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>
答案 0 :(得分:4)
您在execute()方法中返回的返回值必须是映射为值之一。 因为你没有这样的结果名称:
<result name="resultName"></result>
它将使用默认值:“success”。您必须在execute()方法中返回“success”值。
execute方法的结果值是映射结果的名称。要发送消息,您必须在Action中添加String属性(以及获取它的getter),并在execute方法中执行类似
的操作 this.message = "my message";
编辑:如何使用ajax获取消息: 如果您在操作中将消息设置为名为“String message”的属性,并且您具有该属性的getter(public String getMessage()),则可以获取此信息,以访问您在ajax调用中获得的对象中的此属性。如果您使用jquery执行ajax调用,则可以通过以下方式获取它:
$.ajax({
url: '/yourAjaxUrl',
success: function(data) {
var message = data.message;
alert('The message is '+message);
$('#my_result').html(message);
}
});
修改强> 在包标签中的struts xml中,您必须定义json类型:
<result-types>
<result-type name="json" class="com.googlecode.jsonplugin.JSONResult">
...
</result-types>
并添加json-plugin.jar,可以下载here
中的更多信息