Struts2

1, OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。
2,Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如:<s:propertyvalue="xxx"/>。
3,OGNL中重要的3个符号:#、%、$:
4,OGNL 要结合 Struts 标签来使用。由于比较灵活,也容易把人弄晕,尤其是“%”、“#”、“$”这三个符号的使用。
5,#符号
(1)访问非根对象的属性,如 ActionContext 上下文,由于 Struts 2 中值栈被视为根对象,所以访问其他非根对象时,需要加“#”前缀。
例如#session.msg 表达式,实际上,#相当于 ActionContext.getContext();#session.msg表达式相当于 ActionContext.getContext().getSession().getAttribute("msg")
(2) 用来构造 Map,使用过“#”符号构造 Map,
例如“#{‘key1’:‘value1’, ‘key2’:‘value2’, ‘key3’:‘value3’}”,这种方式
6,%符号
“%”符号是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是 OGNL表达式。%符号的用途是在标志的属性为字符串类型时,计算 OGNL 表达式的值,如下面
的代码所示:
7,$符号
(1) 在国际化资源文件中,引用 OGNL 表达式。例如,国际化资源文件中的代码:
reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间
(2) 在 Struts 2 配置文件中,引用 OGNL 表达式,例如下面的配置:
<action name="pageAction" class="com.dream.action.PageAction">
   <result name="success">/${pageName}.jsp</result>  
</action>

8,OGNL如何融入框架

数据进入,当请求进入框架时,它作为一个HttpServletRequest对象公开给java语言,像我们之前知道的Struts建立在servlet api上,请求参数被作为名、值对存储,名字和值都是string类型。接下来框架开始出来来源这些请求参数的的数据的转移及类型的转换。OGNL自动将数据转移到ValueStack的对象上,我们把user对象作为动作组件javabean属性公开出来,将动作对象放到valuestack上,我们已经准备好让OGNL做导航型的工作。

9,Struts 2 的控制标签
if/else
<s:if test="表达式 1">
标签内容
</s:if>
<s:elseif test="表达式 2">
标签内容
</s:elseif>
<s:else>
标签内容
</s:else>

<s:iterator>标签
<s:iterator value="#session.list" var="name" status="statu"></s:iterator>
<s:property>标签
property 标签的作用就是输出指定值。property 标签输出 value 属性指定的值,如果没有指定 value 属性,则默认输出 ValueStack 栈顶的值。
该标签有如下几个属性。
default:可选属性,如果输出的属性值为null,则显示该值
<s:property value="#parameter.name" default="fairy"/><br/>

<s:set value="#p" name="xxx"/>
set标签 用于将某个值放入指定范围内。例如application、session范围等。
set标签属性:
1.name: 必填,重新生成的新变量的名字
2.scope: 可选,指定新变量被放置的范围,该属性可以接受application、session、request、page或action 5个值。如果没有指定,默认是放置在Stack Context中。
3.value: 可选,指定将赋给变量的值。如果没指定,则将ValueStack栈顶的值赋给新变量。
4.var: 可选,指定该元素的引用ID,如果指定了将会将该值放在ValueStack中!
将Stack Context中的p值放入session范围内<br>

<s:set value="#p" name="xxx" scope="session"/>
<!--使用JSP2.0表达式语言直接访问session中的属性-->

${sessionScope.xxx.name}<br>
取出集合中的值赋给<set标签
<s:iterator id="dmsDocumentinfo" value="#request.dmsDocumentinfos">
              //从集合中取值赋给set声明的变量
<s:set name="str" value="#dmsDocumentinfo.documentDesc"></s:set>
//在页面显示set标签的值
<s:property value="#str" />
</s:iterator>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279

推荐阅读更多精彩内容

  • 概述 什么是Struts2的框架Struts2是Struts1的下一代产品,是在 struts1和WebWork的...
    inke阅读 2,182评论 0 50
  • action中如何接受页面传过来的参数 第一种情况:(同名参数) 例如:通过页面要把id=1 name=tom a...
    清枫_小天阅读 2,864评论 1 22
  • 本文包括:1、OGNL 表达式概述(了解)2、值栈概述3、值栈的存值与取值4、EL 表达式也会获取到值栈中的数据5...
    廖少少阅读 1,219评论 0 14
  • 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatch...
    重山杨阅读 1,496评论 0 38
  • 不怕跌倒,所以飞翔 首先GreenDao的项目地址: [greenDao官方地址]https://github.c...
    笔墨Android阅读 295评论 0 0