在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页面。我在这里缺少什么?
答案 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;
这应该有用。