Ognl表达式 值栈对象ValueStack

ValueStack值栈主要包含另个部分:

1.map栈(非根元素) context:主要存储域对象。

2.list栈(根元素) root:主要存储

(1)通过值栈的push()方法存放的对象

(2)Map对象(通过值栈的set()方法存放的数据)

(3)Action对象

(4)其他代理对象.

测试类OgnlDemo2

<span style="font-size:14px;"><span style="font-family:Courier New;">package cn.itcast.ognl;

import java.util.Map;

import cn.itcast.domain.Admin;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;
import com.sun.accessibility.internal.resources.accessibility;

public class OgnlDemo2  extends ActionSupport{
	public Admin admin=new Admin("liweikang","123");
	
	public Admin getAdmin() {
		return admin;
	}

	public void setAdmin(Admin admin) {
		this.admin = admin;
	}

	public String execute() throws Exception {
		ActionContext ac = ActionContext.getContext();
		ac.getContextMap().put("request_data", "request_data");
		ac.getSession().put("session_data", "session_data");
		ac.getApplication().put("application_data", "application_data");
		ValueStack stack = ac.getValueStack();
		//放到栈顶
		stack.push(admin);
		stack.set("admin1", new Admin("程崇树", "123") );
		System.out.println(stack);<strong><span style="color:#cc33cc;">//我们在这行打了一个断点进行调试</span></strong>
		return SUCCESS;
	}
}</span>
</span>
struts.xml配置文件:

<span style="font-family:Courier New;font-size:14px;"><package name="ognl" extends="struts-default">
		<action name="ognl1" class="cn.itcast.ognl.OgnlDemo2" method="execute">
			<result name="success">/ognl.jsp</result>
		</action>
</package></span>
浏览器访问OgnlDemo2进行断点调试:

可以发现值栈的两个对象分别为map栈和list栈


点开context 找到values:


打开values观察:


找到list栈即root


在ognl1.jsp中取出数据:

<span style="font-family:Courier New;"><body>
    <s:property value="#request.request_data"/>
    <s:property value="#session.sesson_data"/>
    <s:property value="#application.application_data"/>
    <s:property value="admin.username"/>
  </body></span>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OGNL(Object-Graph Navigation Language,对象图导航语言)是一个强大的表达式语言,可以用于Java的各种应用程序中,包括Struts、JavaServer Faces、JavaServer Pages等。在Mybatis中,OGNL表达式可以用于Mapper XML文件中的各种标签中,例如`<if>`、`<where>`、`<set>`、`<foreach>`等标签中。 OGNL表达式可以用于获取Java对象的属性值、调用Java对象的方法、进行算术运算、比较运算、逻辑运算等。例如: ```xml <select id="selectByCondition" resultType="com.example.User"> select * from user where name like #{keyword} and age >= #{minAge} <if test="maxAge != null"> and age <= #{maxAge} </if> </select> ``` 在这个例子中,`#{keyword}`、`#{minAge}`、`#{maxAge}`都是OGNL表达式,表示获取Java对象中的属性值。例如,如果传入的参数对象是一个`User`对象,那么`#{keyword}`可以表示`user.getKeyword()`方法的返回值,`#{minAge}`可以表示`user.getMinAge()`方法的返回值。 在OGNL表达式中,还可以进行算术运算、比较运算、逻辑运算等。例如,`age >= #{minAge}`表示将`age`和`#{minAge}`进行比较,判断`age`是否大于等于`#{minAge}`;`age <= #{maxAge}`表示将`age`和`#{maxAge}`进行比较,判断`age`是否小于等于`#{maxAge}`。 除了基本的运算符和表达式OGNL还提供了丰富的函数和操作符,例如`in`操作符、`not`操作符、`contains`函数、`size`函数等。这些函数和操作符可以方便地进行集合操作、字符串操作等。在使用OGNL表达式时,需要注意语法的正确性和安全性,以避免可能的安全漏洞。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值