【问题标题】:Struts2 + Jquery Library - What is wrong on this AJAX call?Struts2 + Jquery Library - 这个 AJAX 调用有什么问题?
【发布时间】:2010-12-06 18:01:07
【问题描述】:

我正在尝试使用 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 上 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>

【问题讨论】:

  • 是的,但我还是有问题。检查评论:)
  • 我已经再次评论了答案
  • 问题再次编辑和评论。

标签: ajax struts2 struts javabeans


【解决方案1】:

您在 execute() 方法中返回的返回值必须是映射为值之一。 由于您没有这样的结果名称:

<result name="resultName"></result>

它将使用默认值:“成功”。您必须在 execute() 方法中返回“成功”值。

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);
    }
});

编辑: 在你的 package 标签中的 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

【讨论】:

  • 谢谢,很好。但是如何在my_result div 中打印结果值?
  • 我看到了你的例子。但我仍然不明白如何只获取我的 div my_result 上的消息,而不是整个 div(直接使用 Struts2 而不是 Jquery)。我该怎么做?检查上面的更新。它返回消息(是的,确实如此),但它在my_result div 上返回整个页面(index.jsp)(我不想要这个)。
  • 事实上,我想做的只是重新加载名为my_result的div,而不是整个页面。你知道我的意思吗?
  • 通过阅读文档,我阅读了'targets' is a list of element ids whose content will be updated with the text returned from request.,但它会在 id 上加载整个页面(即my_result)。所以我认为我需要在 .xml 上更改一些东西......并且作为“结果”不要使用 jsp 页面
  • 如果您只想通过ajax 获取信息并且不想下载整个页面,则必须以json 或xml 的形式返回信息。对于 标签中的 json,有一个 type 属性,您可以在其中将其标记为 json result 。这里有一个例子:mkyong.com/struts2/struts-2-and-json-example 然后你就可以按照我上面指出的方式(通过data.message)获取消息信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多