坠落凡间的struts2(8)---struts2的标签

来源:互联网 发布:淘宝香港丰胸 编辑:程序博客网 时间:2024/05/15 18:12

Struts2提供的表达式语言支持

Struts 2支持以下几种表达式语言:
OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言(默认支持); 
JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言; 
Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些特性; 
Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎;

OGNL标签

Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势:
支持对象方法调用,如xxx.doSomeSpecial();
支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 |  值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME; 
支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(),这个表达式会返回80; 
访问OGNL上下文(OGNL context)和ActionContext; 
操作集合对象。 

ONGLConext


对于OGNL的非根对象的取值

</head><%request.setAttribute("name", "senssic");session.setAttribute("age","qiyu");%><body>恭喜你干啥都成功了${name}<jc:out value="${name}"></jc:out><s:property value="#session.age"/></body>
使用#取就行了,注意ongl的表达式必须放在struts2标签中才能起作用,因为,只有这样,struts的标签解析程序才能识别并运行处理,放到其他标签中不起作用的。
关于标签的原理看我的另一篇博文:http://blog.csdn.net/senssic/article/details/11497105
还有一点需要注意:从2.0.11版开始struts2的标签不支持el表达式(jstl支持jsp也支持),所以<s:property value="${age}"/>会报错
还有一点:
<s:textfield cssClass="label" name="name" value="#session.user.name"></s:textfield>
会出现如下问题:"value" does not support runtime expressions
这是因为编译器不知道" "里的内容是OGNL表达式,Struts2的标签几十几百个,要记住哪一个标签的处理类将标签的属性作为OGNL表达式是一件很困难的事情,在不清楚处理类的处理方式时怎么办,%{}对于标签处理类来说,若处理类将属性值作为普通字符串则%{}符号包含的字符串当做OGNL表达式。

所以改成这样就好了:<s:textfield cssClass="label" name="name" value="%{#session.user.name}"></s:textfield>

值栈的使用

Struts2中值栈对象是OGNL的根,不需使用“#”
Action对象被自动加入值栈中
访问根对象不需加任何特殊符号即可访问
 <s:textfield name="userName" label="uerName" />
 <s:textfield name="age" label="age" />
获取Struts2的植栈对象:
ActionContext aContext = ActionContext.getContext();
aContext.put("nihao", "qiyusssss");//广义栈,包括ValueStack还有request和session等action信息
ValueStack vStack = aContext.getValueStack();//狭义栈,每个栈对应一个action的周期
vStack.setValue("time", new Date());
vStack.set("aaa", "wwwww");

ognl的操作符号

除了#获取属性值,ognl也提供了其他的操作符号
1.@类路径@类@方法名或属性名
<s:property value="@java.lang.String@format('name: %s', 'zhangsan') "/>
<s:property value=“@vs@format(‘name: %s’, ‘zhangsan’) ”/>(类位于值栈中)
struts.ognl.allowStaticMethodAccess=false(必须为true)
2.直接生成列表或MAP
{list1,list2,list3,list4….}
#{key1:value1,key2:value2,…}
in 与 not in运算
?(符合要求)^(第一个符合)$(最后一个符合)的使用
class.students.{? #this.score>60}
3.“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值 
 <s:set var="url" value="#{'163':'http://www.163.com','sina':'http://www.sina.com'}"/>
  url:<s:url value="#url['163']"/><br>
  url:<s:url value="%{#url['163']}"/>
struts2 OGNL ValueStack概念理解 # % $ 的区别
一、"#"的用法 
   1、 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:  
        parameters  包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter("id") 
       request 包含当前HttpServletRequest的属性(attribute)的Map #request.userName相当于request.getAttribute("userName") 
       session 包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName") 
       application 包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName") 
       attr 用于按request > session > application顺序访问其属性(attribute) #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止 
     2、用于过滤和投影(projecting)集合,如books.{?#this.price<100}; 
     3、构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。 
二、"%"的用法 
    “%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。例如在Ognl.jsp中加入以下代码: 
    <h3>%的用途</h3> 
    <p><s:url value="#foobar['foo1']" /></p> 
    <p><s:url value="%{#foobar['foo1']}" /></p> 
三、"$"的用法 
    1、用于在国际化资源文件中,引用OGNL表达式 
    2、在Struts 2配置文件中,引用OGNL表达式 
     例如: 
         <action name="AddPhoto" class="addPhoto"> 
            <interceptor-ref name="fileUploadStack" />            
            <result type="redirect">ListPhotos.action?       albumId=${albumId}</result> 
        </action>

ongl的标签

非UI标签—控制标签

if-elseif-else 用于判断控制
append用于将多个集合组合为一个集合对象
generator 将一个字符串生成一个集合
iterator 迭代对象
merge 与append功能相同,但新集合元素排列方式不同
sort  用于集合对象的排序
subset 取集合的子集




非UI标签—数据标签

action 调用action标签
 bean 用于创建JavaBean实例
date格式化日期
debug生成调试的超链接,输出context的内容
i18n调用资源文件
push把值压入VS栈顶
set设置一个变量
text用于显示资源文件中的文本
url生成一个URL地址
property直接输出action中的属性值
include包含其他的JSP页面
param为其他标签提供参数

UI标签—表单标签

表单通用属性

表单通用属性—模板相关的属性

templateDir : 指定表单所用的模板文件目录; 
theme: 指定表单所用的主题; 
template:指定表单所用的模板;

表单通用属性—JS相关的属性

onclick:指定鼠标在该标签生成的表单元素上单击时触发javaScript函数; 
ondbclick:指定鼠标在该标签生成的表单元素上双击时触发javaScript函数; 
onmousedown:指定鼠标在该标签生成的表单元素上按下时时触发javaScript函数; 
onmouseup:指定鼠标在该标签生成的表单元素上松开时触发javaScript函数; 
onmouseover:指定鼠标在该标签生成的表单元素上悬停时触发javaScript函数; 
onmouseout:指定鼠标移除该标签生成的表单元素时触发javaScript函数; 
onfocus:指定鼠标在该标签生成的表单元素得到焦点时触发的t函数; 
onblur:指定鼠标在该标签生成的表单元素失去焦点时触发的函数; 
onkeypress:指定单击键盘上某个键时触发函数; 
onkeyup:指定松开键盘上某个键时触发函数; 
onkeydown:指定按下键盘上某个键时触发函数;  
onselect:对下拉列表项等可以选择表单元素,指定选中元素时触发javaScript函数; 
onchange:对于文本框等可以接受输入表单元素。指定当改变时触发javaScript函数; 

表单通用属性—样式相关的属性

cssClass (simple/String)  定义 html class 属性  
cssStyle  (simple/String) 定义html style 属性  
title  (simple/String)   定义html title 属性  
disabled  (simple/String)   定义html disabled 属性  
name  (simple/String)   表单元素的name映射
tabIndex  (simple/String)   定义html tabindex 属性  
value  (simple/Object)   定义表单元素的value
label  (xhtml /String)   定义表单元素的label  
labelPosition  (xhtml /String)   定义表单元素的label位置(top/left),缺省为left  
requiredposition  (xhtml /String)   定义required 标识相对label元素的位置 (left/right),缺省是 right  
required  (xhtml / Boolean)  在label中添加 * (true增加,否则不增加)  

表单元素的name与value属性

name相对于Action的实例属性
value获取该属性的值
Struts2中只要指定name属性就可以映射值

表单元素介绍

head用于生成页面特定的CSS与JS
checkboxList 一次创建多个复选框
radio生成一个单选按钮,属性同上
comboBox 生成单个文本框与下拉列表框
doubleselect生成一个级联下拉列表框
Optiontransferselect用于生成两个下拉列表框,并可相互转移值
select用于生成一个下拉列表框
updownselect用于生成一个选项可移动的下拉列表框
optgroup选项组标签
token防止表单重复提交标签

UI标签—非表单标签

actionerror:如果Action实例的getActionErrors()方法返回不为null,则该标签负责输出该方法返回的系列错误。
fielderror:如果Action实例存在表单域的类型转换错误、校验错误,该标签负责输出这些错误提示。 
actionmessage:如果Action实例的getActionMessages()方法返回不为null,则该标签负责输出该方法返回的系列消息。 
component:使用此标签可以生成一个自定义组件。 

UI标签与模板

Struts2中的所有UI标签都是基于模板的
在struts2中提供了与UI标签对应的主题模板
主题是一组模板的集合

them的使用


原创粉丝点击