【Struts2】 ognl表达式总结

本文深入解析了Struts2框架的核心概念及其配置要点,特别聚焦于OGNL表达式的应用,涵盖密码框、文本框、下拉框等控件的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇文章我们介绍了过滤器于拦截器的区别,这边我们详细总结下Struts2的ognl表达式

1、介绍ognl之前首先要说说Struts2是什么

struts2是的核心是思想aop思想,纵向提取,横向重复。核心产物是拦截器,其默认jdk的api中提供了几十种默认的选择,是可插拔式的。
struts2是一个基于mvc的框架,其重点坐落于control上,让我们在开发view和control层更方便,节省开发时间。

2、配置一个struts2的框架的两点

A:前面我们讲过,struts2的拦截器是基于过滤器的,所以需要在web.xml配置一个 Struts2核心Filter的实现类

<filter>
  	<filter-name>MyFilter</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>MyFilter</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>

B:struts.xml文件是struts2框架中的核心文件,其中主要完成负责action的映射【通过类可以反射出其类中的一切数据】,与action返回过来的result结果。

<struts>
	<package name="dept" extends="comm">
		<action name="dept_*" method="{1}" class="com.sh.action.DeptAction">
				<interceptor-ref name="islogin"></interceptor-ref>
				<result name="all">/dept/all.jsp</result>
				<result name="upp">/dept/upp.jsp</result>
			</action>
	</package>
	</struts>

3、struts2中需要注意的地方

view与control相呼应:view层返回或者需要接收什么值,都必须在action中先私有声明,然后再封装。比如jsp页面中需要得到DeptEntity的数据 ,那么我们就必须在Acation中先申明,然后再get、set封装

	private Dept dept;

	public Dept getDept() {
		return dept;
	}

	public void setDept(Dept dept) {
		this.dept = dept;
	}

4、ognl表达式
谈到表达式就得说密码框、文本框、下拉框、单选按钮、复选按钮、上传控件、文本域
使用ognl需要在jsp中声明

<!-- 标签前缀          虚拟路径              -->
<%@ taglib prefix="s" uri="/struts-tags"%>

1:密码框

<s:password name="user.upwd" theme="simple"></s:password>

2:文本框

<s:textfield name="user.uname" theme="simple"></s:textfield>

3:下拉框

<s:select list="Dlist" name="emp.dept.pid" listKey="pid" listValue="pname" theme="simple"></s:select>

这里备注下:list通过action传递过来的集合,这里使用到了emp实体类嵌套的dept类属性,其中通过emp.dept.pid来传、取值
                      对比下没用hibernate框架的时候,获取dept表中的主键部门编号,然后赋值给emp中的外键
                      用了框架之后hibernate会通过映射与封装对应到emp中的pid中
                      其中listKey对应下拉框的键,listValue对应下拉框的值

4:单选按钮

<s:radio list="#{1:'男',0:'女' }" name="emp.esex" theme="simple"></s:radio>

这里构造了一个list集合,这里前面加了一个#解释下:
OGNL表达式,访问root中数据时 不需要 #, 访问 request、 session、application、 attr、 parameters 对象数据 必须写 #
值栈:简单的说,就是存放action的堆栈,当我们提交一个请求到服务器端 action时,就有个堆栈,如果action在服务器端进行跳转,所有action共用一个堆栈,当需要保存在action中的数据时,首先从栈顶开始 搜索,若找到相同的属性名(与要获得的数据的属性名相同)时,即将值取出,但这种情况可能出现找到的值不是我们想要的值,那么解决此问题需要用TOP语法 和N语法来进行解决。

5:复选框

<s:checkboxlist list="{'听歌','跳舞','上午','打游戏','郊游'}" name="emp.ahob" value="emp.ahob" theme="simple"></s:checkboxlist>

ognl表达式规范 :如果是单选构造的集合就要加#   ,多选就不需要加  。

6:文本域

	<s:textarea name="dept.premark" theme="simple"></s:textarea>

最后剩下一个穿上控件,下次着重说明,也练下手。

【ps:全部是自己的理解,如有错误请多多指教】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值