這兩天不看到不少人在Struts 2中使用AJAX的方法都是錯的(或者說是過時的),所以想起寫這么一片博客,來告訴大家Struts 2中的AJAX是怎么用的。
如果大家對Struts 2的文檔很了解,並且有一定的英文文檔閱讀能力,推薦大家去參考Struts 2的官方文檔。
官方文檔相關內容:
如果不會閱讀Struts 2的文檔,或者英文閱讀能力有限,可以參考我下面的內容(當然,這里所介紹的只是最簡單的使用方法)。
1. Struts 2中使用AJAX
Struts 1和Struts 2都能使用如下代碼實現AJAX的使用:
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World! This is an AJAX response from a Struts Action.");
out.flush();
return null;
然而這是一種過時的方法,不是不能用,而是不推薦(並且這里面經常會出現一些字符編碼問題,所以並不推薦使用)。
Struts 2中可以使用InputStream實現:
Action類:
package actions;
import java.io.InputStream;
import java.io.StringBufferInputStream;
import com.opensymphony.xwork2.ActionSupport;
public class TextResult extends ActionSupport {
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
public String execute() throws Exception {
inputStream = new StringBufferInputStream("Hello World! This is a text string response from a Struts 2 Action.");
return SUCCESS;
}
}
配置文件struts.xml:
<action name="text-result" class="actions.TextResult">
<result type="stream">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
</action>
這樣,我們只需要更改Action類中的inputStream值,就能夠實現AJAX輸出啦。
2. Struts 2中使用JSON
首先,請Struts 2.1.7+的用戶引入下載的Struts 2包集合中的struts2-json-plugin.jar。
Struts 2.1.7一下的用戶,請去下載該Plugin包,改包位置在Google Code上有發布。(現在已經停止更新了,推薦使用新版本Struts 2框架。)
之后,Action類不需要更改,只需要在struts.xml文件中配置相關內容就可以使用了。(很便利的~)
配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="example" extends="json-default">
<action name="JSONExample" class="example.JSONExample">
<result type="json"/>
</action>
</package>
</struts>
請注意如下幾點:
- package的extends是“json-default”,如果沒有繼承這個包,則會拋出異常,顯示沒有result type為json。
- result的type請設置為json
- 前台JavaScript代碼,請使用JSON格式接收。(如jQuery請設置AJAX的dataType為json)
至此,就可以使用JSON了。如果需要更高級的操作,請自行參考文檔。