Struts2 + Jquery库 - 这个AJAX调用有什么问题?

时间:2010-12-06 18:01:07

标签: ajax struts2 struts javabeans

我正在尝试使用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:
No result defined for action model.UserManager and result i have insered aaa and bbb
消息(昵称= aaa和密码= 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>

1 个答案:

答案 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

http://code.google.com/p/jsonplugin/wiki/Documentation

中的更多信息