- 通过流的方式传递,可以用来传递简单数据,适合于无结构,简单的字符串信息等
(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">\
<!-- 单层简单属性过滤使用root -->
<!--<param name="root">users</param>-->
<!-- 哪些属性需要传递,users为list集合,d+为集合的任意下标 -->
<param name="includeProperties">users\[\d+\]\.user,users\[\d+\]\.password</param>
<!-- 哪些属性不进行传递 -->
<!-- <param name="excludeProperties">users\[\d+\]\.user,users\[\d+\]\..password</param> -->
<!-- 过滤空值,空值不进行传递 -->
<param name="excludeNullProperties">true</param>
</result>
</action>
</package>