El表达式语言,用于页面取值,jsp页面取值的标准。(默认直接可以使用,应用范围更广。)
Ognl表达式语言, struts标签默认支持的表达式语言。必须配置struts标签用,不能离开struts标签直接用。
与其相关的ValueStack对象
用户每次访问struts的action,都会创建一个Action对象、ValueStack对象、ActionContext对象; 然后把Action对象放入ValueStack中; 最后再把ValueStack对象放入request中,传入jsp页面。(key:struts.valueStack);开发者只需要通过ActionContext对象就可以访问struts的其他的关键对象。
list栈中
这里我们可以把页面显示的数据保存到的root根元素中,通过Ognl表达式显示,注意:这时数据在根元素中,不需要添加‘#’号。
map栈中
context,ValueStack中非根元素数据,
源码:
public class OgnlDemo2 extends ActionSupport{
// 根元素值
private User user = new User(100,"Jacks");
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
ActionContext ac = ActionContext.getContext();
// 映射数据
ac.getContextMap().put("request_data", "request_data");
// 数据存储request
// Map<String,Object> map = (Map<String, Object>) ac.get("request");
// map.put("request_data", "request_data");
// map.put("cn", "China");
ac.getSession().put("Session_data", "Session_data");
ac.getApplication().put("Application_data", "Application_data");
// 二、值栈对象的存储数据的原理
ValueStack valuestack = ac.getValueStack();
/***************操作根元素的几种方法*****************/
// 设置数据: 入栈
valuestack.push(new User(1002,"Tom")); // 栈顶
valuestack.pop(); // 移除栈顶元素
// 如何存储? map结构存储
//vs.set("user1", new User(1,"Jacky1"));
//vs.set("user2", new User(2,"Jacky2"));
return super.execute();
}
}
最后配置struts
感兴趣的朋友可以关注微信公众号(会定时推送新的知识):