最直接的是可以通过Action的属性进行传输
我们在Action中定义了属性,在加载这个页面时指定了调用这个Action中的某个方法,在这个方法中给这些属性直接赋值,这些值默认会加入到值栈中,在jsp页面通过ognl表达式直接获取即可。
public class UserAction {
private String username;
private Integer age;
private boolean valid;
//查看用户的详细信息
public String detail(){
username = "张三";
age = 18;(这些数据以后肯定是从数据库中获取)
valid = true;
return "detail";
}
Jsp页面获取:
<%@ page language="Java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %> 注意导入struts2标签
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
username:<s:property value="username"/> <br/> 和action中的属性值对应
valid:<s:property value="valid"/> <br/>
age:<s:property value="age"/> <br/>
</body>
</html>
通过ActionContext传输actionContext与值栈不同,不过它也可以理解成一个存储数据信息的容器。
可通过ActionContext.getContext().put()方法来传值
public String detail(){
ActionContext.getContext().put("name", "王五"); //此处可以放字符串,同样可以放集合或者数组对象
username = "张三";
ActionContext.getContext().put("username", "李四")
return "detail";
}
在jsp页面中取:
<!-- 从ActionContext中取name的值 -->
name: <s:property value="#name"/> <br/> 注意这里从contextAction中取的话需要使用#注明
name: <s:property value="name"/> <br/> 如果不使用#默认会到值栈中去取数据,如果值栈中没有对应的属性,会到contextAction 中去找。
通过request/session等传输
//通过request
ServletActionContext.getRequest().setAttribute("sex", "男");
//通过session
ServletActionContext.getRequest().getSession().setAttribute("address", "北京");
//通过session
ActionContext.getContext().getSession().put("postcode", "1234567");
在jsp页面中取值
<body>
<!-- 从request中取sex值 -->
request.sex = <s:property value="#request.sex"/> <br/>
request.sex = <s:property value="#request['sex']"/> <br/>
<!-- 从session中取值 -->
session.address = <s:property value="#session.address"/> <br/>
session.postcode = <s:property value="#session.postcode"/> <br/>
<!-- 依次搜索page/request/session/application scope取值 -->
attr.postcode=<s:property value="#attr.postcode"/> <br/>
</body>
传递复杂对象及集合对象
ActionContext.getContext().put("users", list);
jsp页面中取值
<s:iterator value="#users">
<!-- 这个访问的是当前循环的user对象中的username属性 -->
username:<s:property value="username"/>,<s:property value="age"/> <br/>
</s:iterator>