
一、Struts2可以将所有标签分成3类:
UI标签:主要用于生成HTML元素的标签。
非UI标签:主要用于访问,逻辑控制等标签。
Ajax标签:用于Ajax支持的标签。
对于UI标签,则有可以分为两类:
表当标签:表单标签主要用与生成HTML页面的from元素,以及普通表单元素的标签。
非表单标签:非表单标签主要用于生成页面的树、Tab页等。ognl表达式
流程控制标签:主要包含用于实现分页、循环等流程的标签。
数据访问标签:主要包含用于输出ValueStack中的值,完成国际化等功能的标签。
Struts2标签库分类图:

二、使用Struts2标签库的准备:
1、在Web.Xml文件中增加标签库d定义。(如果应用使用的是Servlet2.3以前)
三、Struts2的OGNL标签:
OGNL是ObjectGraphicNavigationLanguage的缩写,它是一个开源项目。Struts2框架使用OGNL作为默认的表达式语言。
在传统的OGNL表达式求值中,系统会假设系统只要一个根对象,但Struts2的StackContext需要多个“根”对象,其中ValueStacke只是多个“根”对象的其中之一。
假设:使用标签OGNL表达式求值,不是用Struts2的OGNL表达式是求之。如果系统的Context中包含两个对象:foo对象,它在Context中的名字为foo;bar对象, 并且它在Context中的名为bar。将foo对象设置成Context的根对象。
返回foo.getBlah()方法的返回值#foo.blah
返回bar.getBlah()方法的返回值#bar.blah
可以看出ONGL表达式的语法非正常简洁。
Struts2不知根据表达式从ValueStack中取的对象,还可以直接从对象中获取属性。Struts2提供了一个特殊的OGNLProperAccessories(属性访问器),它可以自动搜寻栈内的所有实体(从上到下),直接找到求值表达式匹配的属性。
Struts2使用标准的Context来进行OGNL表达式求值,OGNl处理的顶级对象是一个Context,这个Context对象就是一个Map类型实例,在该OGNL的Context中,有一个对象,这个根对象就是OGNLValueStack,如果需要访问ValueStack里的属性,例如:#取出Valuestack中的bar属性:${bar};
除此之外:Struts2还提供了一些命名对象,这些命名对象与根对象无关,它们只是存在于StackContext中。所以,访问这些对象实现需要使用#前缀来指明。
1、paramenters对象:用于访问HTTP请求参数,
2、request对象:用于访问HttpServletRequset的属性(Attribute)的Map。例如#request.userName
3、Session对象:用于访问HttpSession的属性。例如#session.userName
4、Application对象:用于访问ServletContext的属性。例如#application.userName
5、Attr对象:如果可以访问到,则访问PageContext,否则将依次搜索HttpServletRequset,HttpSession,ServletContext中的属性。
值得注意的是:当系统创建Action实例后,该Action实例已经被保存到ValueStack中,故无需书写#即可访问Action属性。
OGNL中的集合(List/Map):
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-31926-1.html
希望下一代能做好
小米公司知道国家质检总局抢不到小米手机后马上赶过来送上几部意思意思