Struts2框架非同步獲取資料
阿新 • • 發佈:2018-12-21
- 通過流的方式傳遞,可以用來傳遞簡單資料,適合於無結構,簡單的字串資訊等 (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>