使用ajax调用Struts 2动作,该动作直接将字符串写入响应并不返回字符串

时间:2013-06-16 12:17:31

标签: java jquery ajax jsp struts2

在struts2应用程序中,我调用Ajax请求并直接将字符串写入响应,如下所示,并在操作的execute方法中返回null

ServeletActionContext.getResponse().getOutputStream().print("sample string");
return null;

struts.xml中我有以下声明,(下面是应用程序如何声明具有正常工作结果类型的操作。在我的情况下,因为我不需要结果来调用JSP或其他操作,我没有添加结果标签)

<action name="controller" class="controller">

我在application-context.xml

中映射了部分类
<bean id="controller" class="com.test.ControllerAction" scope="prototype">

然后我有如下的ajax调用,

$.ajax({url:"/root/me/controller.action",success:function(result){
    alert(result);
}});

但问题出在上面而不是警告我为响应编写的"sample string",它会警告上面的Ajax调用所在的整个JSP页面。我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

默认情况下,返回结果类型stream会输出文本。

<action name="controller" class="ControllerAction">
  <result type="stream">
    <param name="contentType">text/html</param>
    <param name="inputName">stream</param>
  </result>
</action

stream应为属性类型ImputStream;

public class ControllerAction extends ActionSupport {

  private InputStream stream;

  //getter here
  public InputStream getStream() {
    return stream;
  }

  public String execute() throws Exception {
    String str = "sample string";
    stream = new ByteArrayInputStream(str.getBytes());
    return SUCCESS;
  }
}    

答案 1 :(得分:0)

而不是使用

ServeletActionContext.getResponse().getOutputStream().print("sample string");
return null;

使用此代码

PrintWriter out = response.getWriter();
out.write("sample string");
return null;

这应该有用。