1. 程式人生 > >Struts2框架非同步獲取資料

Struts2框架非同步獲取資料

  1. 通過流的方式傳遞,可以用來傳遞簡單資料,適合於無結構,簡單的字串資訊等 (1) 需要在Action類中新增一個InputStream屬性,將非同步請求處理要響應的結果內容轉換成輸入流提供給框架,框架會間接通過輸出流響應給瀏覽器
public class StreamAjaxAction {
   private String uname;
   private InputStream inputStream;
   public String doAjax() {
   	String msg = "";
   	if (uname.trim().equals("bbb")) {
   		msg =
"使用者名稱已佔用!"; inputStream = new ByteArrayInputStream(msg.getBytes()); } else { msg = "使用者名稱可用!"; inputStream = new ByteArrayInputStream(msg.getBytes()); } return "success"; } public String getUname() { return uname; } public void setUname(String uname) { this
.uname = uname; } public InputStream getInputStream() { return inputStream; } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } }

(2) 在struts.xml檔案中的<action>標籤下配置標籤,type值為stream``

	<action name="DoAjax" class="action.StreamAjaxAction"
method="doAjax">
<result name="success" type="stream"> <!-- 流非同步時的固定用法--> <param name="contentType">text/html</param> <!-- inputStream為在action類中封裝的屬性名--> <param name="inputName">inputStream</param> </result> </action>

前端傳送非同步請求演示 2. json資料非同步傳輸,適合傳遞複雜結構的引數 (1) 先匯入框架提供的json包 (2) 在Action類中新增一個複合型別的屬性,用來存放非同步響應資料,框架會自動轉為json資料

public class AjaxJsonAction {
   private List<User> users;

   public String ajaxJson() {
   	users = new ArrayList<User>();
   	users.add(new User(1, "aaa", "123"));
   	users.add(new User(2, "bbb", "456"));
   	users.add(new User(3, "ccc", "789"));
   	return "success";
   }

   public List<User> getUsers() {
   	return users;
   }

   public void setUsers(List<User> users) {
   	this.users = users;
   }
}

(3) 配置非同步json的xml配置,action標籤所在的包需要繼承json-default,此包繼承自struts-default

<package name="json" namespace="/" extends="json-default">
		<action name="ajaxJson" class="action.AjaxJsonAction" method="ajaxJson">
   		<result name="success" type="json">
   			<param name="root">users</param>
   			<!-- 哪些屬性需要封裝傳遞 -->
   			<param name="includeProperties">user,password</param>
   			<!-- 哪些屬性不進行封裝傳遞 -->
   		<!-- 	<param name="excludeProperties">users.user,users.password</param> -->
   			<!-- 過濾空值,空值不進行封裝 -->
   			 <param name="excludeNullProperties">true</param> 
   		</result>
   	</action>
	</package>