文档章节

使用Struts2标签时的一些问题

mr桀骜不驯
 mr桀骜不驯
发布于 2013/03/13 21:30
字数 676
阅读 112
收藏 3

问题一:#,%{},$符号

  在Struts2标签属性中经常会出现"#"或者"%{}"的符号出现,通过上面OGNL表达式基础的介绍,知道了OGNL上下文中有且仅有一个根对象。Struts2为我们定义了许多明明对象,他们分别是"ValueStack","Parameters","Session","Request", "Appliction","Attr",其中"ValueStack"被设置为上下文的根对象。访问非根对象必须加上"#"号,这就是出现"#"的原因。Struts2中的标的处理类,并不是所有都将标签的属性作为OGNL表达式来看待,有时候我们需要设置动态地值,则必须告诉标签的处理类该字符串按照OGNL表达式来处理,%{}符号的作用就是告诉标签的处理类将它包含的字符串按照OGNL表达式处理。 "$"符号用于XML文件中用于获取动态值,与%{}作用类似。

问题二:%{}符号的影响

  Struts2的标签有很多,要记住哪一个标签的处理类将标签的属性作为OGNL表达式是一件很困难的事情,在不清楚处理类的处理方式时怎么办,%{}对于标签处理类来说,若处理类将属性值作为普通字符串则%{}符号包含的字符串当做OGNL表达式,若处理类将属性值作为OGNL表达式来处理,则直接忽略%{}符号。换句话说,不清楚处理方式的话,可以都使用%{}符号。

问题三:标签是如何获得数据

下面是ValueStack的官方描述: 

ValueStack allows multiple beans to be pushed in and dynamic EL expressions to be evaluated against it. When evaluating an expression, the stack will be searched down the stack, from the latest objects pushed in to the earliest, looking for a bean with a getter or setter for the given property or a method of the given name (depending on the expression being evaluated).

大致意思:ValueStack允许保存多个bean(也就是Action),并且可以使用表达式语言获得他们。当评估一个表达式,ValueStack将会从栈顶到栈底的方向被搜索一遍,对于给定的属性名称寻找bean的getter或setter方法或寻找给定的方法。

每当一个请求到达Action时,Struts2会将Action对象推入ValueStack中。

<body> username:<s:property value="username"/><br/> 
username:<%=((HelloWorldAction)ActionContext.getContext().getValueStack().peek()).getUsername() %><br/> 
</body>


页面显示结果:

username:zhangsan
username:zhangsan

  可以看到标签取值与用Java代码取值的结果相同,明显标签的取值方式更简练简洁。OGNL表达式"username"表示了从根对象ValueStack中取出属性username的值。它会从栈顶到栈底遍历ValueStack,直到找某一个Action中的"username"属性。

本文转载自:http://www.cnblogs.com/beliefbetrayal/archive/2012/02/11/2347244.html

mr桀骜不驯
粉丝 7
博文 12
码字总数 4596
作品 0
广州
程序员
私信 提问
Struts2 校验框架学习笔记

truts2 校验框架 Struts2 和Struts1同样也提供了校验框架,但在Struts2 已经不再把校验框架做为一个插件,而是已经内置到了Struts2中,而且配置起来更为简单方便,功能也更强大。 下面以一个例子...

jxlgzwh
2014/03/18
234
0
Struts.properties

Struts2提供了很多可配置的属性,通过这些属性的设置,可以改变框架的行 为,从而满足不同的Web应用的需求。这些属性可以在Struts.properties文件中进行设置,struts.properties是标准的 Ja...

crazyinsomnia
2010/06/12
998
0
关于struts2漏洞问题及解决办法

关于Struts2漏洞引起的问题我就不详细细说了,最近在各大网站及论坛上都有描述,上面都列出了具体的解决办法对策,对我来说,刚好遇到有现实的案例去解决,在参考了各大论坛、博客的文档之后...

zkool
2013/08/05
1K
0
struts2 validator验证随笔

环境:eclipse-jee-galileo-SR2-win32+apache-tomcat-6.0.18+struts-2.3.14 最近学习struts2框架,就在此随笔谢谢,如有不足,请各位赐教。 1.工程出现下面错误: 2013-6-2 20:28:15 com.op...

wangbiglei
2013/06/02
1K
0
Freemarker中访问Struts2的select标签的问题以及解决办法

用Struts2做MVC,Freemarker做表现层。因为Freemarker中可以访问Struts2的一些标签,在加上Freemarker本身的一些功能,个人觉得这种组合很是方便。 但是这里碰到一个问题:我参考Struts2的标...

yonge
2009/04/10
4.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
44分钟前
1
0
Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
57分钟前
6
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
7
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
1
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部