strust参数传递优先级,ognl
2021/10/16 23:09:42
本文主要是介绍strust参数传递优先级,ognl,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言:
在上一次课中,讲到了strust传递参数的三种方式,分别是实现ModelDriver接口和给属性提供set方法,以及给对象提供set方法,上一次在测试时是用属性名都不同的,那么如果属性名和对象的属性有重合,那个参数将会被赋给谁。
代码:
package com.csf.web; import com.csf.entity.User; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class TestAction extends ActionSupport implements ModelDriven<User>{ private User user =new User(); @Override public User getModel() { // TODO Auto-generated method stub return user; } private String name; public String getname() { return name; } public void setname(String name) { this.name = name; } public String test() { System.out.println("testing..."); return "toIndex"; } public String list() { System.out.println("listing..."); return "toList"; } public String a() { System.out.println(user); return "toIndex"; } public String b() { System.out.println(name); return "toIndex"; } }
注:在user类中,是有name属性的,而子控制器中也有name属性。
结果是只给user对象的name属性赋了值,。原因是在strust中,实现ModelDriver接口得到的对象的赋值,取值优先级要高于其他的属性。
然后这就引入:OGNL全称是Object Graph Navigation Language(对象图导航语言),
1、它是一门表达式语言,主要用来设置和获取Java对象的属性。
2、在ognl中,有一个ognlContext(ognl上下文)可以理解为ognl的容器,并且这个类实现了Map接口,所以允许通过键值对的方式存取值。
3、在ognl中的对象,有根对象和非根对象的区别,根对象只能存在一个,可以通过ognlContext.setRoot(value)设置跟对象,通过ognlContext.getRoot()获取跟对象。在存取值时,跟对象具有默认最高优先级。非根对象就是普通对象。
4、ognl符合值栈的存取值方式(先进后出),并且取到为止,会从上至下遍历容器取到第一个值退出,如果没取到,会一直往下。
在strust中的ognl结构:
root标注为跟对象。
值栈:是一种存取值得方式,可以理解为在一个容器中,最先放入的,在最底端之后依次往上堆(压栈push),取值则是从上往下(弹栈pop)。
这篇关于strust参数传递优先级,ognl的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14动态路由项目实战:从入门到上手
- 2024-11-14函数组件项目实战:从入门到简单应用
- 2024-11-14获取参数项目实战:新手教程与案例分析
- 2024-11-14可视化开发项目实战:新手入门教程
- 2024-11-14可视化图表项目实战:从入门到实践
- 2024-11-14路由懒加载项目实战:新手入门教程
- 2024-11-14路由嵌套项目实战:新手入门教程
- 2024-11-14全栈低代码开发项目实战:新手入门指南
- 2024-11-14全栈项目实战:新手入门教程
- 2024-11-14useRequest教程:新手快速入门指南