概述
OGNL概述:
OGNL是一种可以吧UI元素(如table和input等基础元素)和model object(模型对象)绑定的语言,且通过OGNL的TypeConverter机制可以更容易实现值类型的转换
.在struts2中使用OGNL表达式实际上是使用实现了ValueStack接口的类OgnlValueStack,他是ValueStack的默认实现类
.ValueStack贯穿整个action的生命周期,每个action实例都拥有一个ValueStack对象{ThreadLocal},其中保存了当前action对象和其他相关对象。
.struts2把ValueStack对象保存在名为:strurs.valueStack的request域中,及ValueStack的作用域为request。当action创建的时候,valuestack就创建了,action销毁时,valuestack随之销毁。
OGNL表达式的基础单元称为导航链
.在struts2的框架中,valuestack就是OGNL的根对象。
.valuestack中的数据分为两部分存放root(栈结构,CompoundRoot)和context(map形式,OgnlContext)
.valuestack中的root对象是CompoundRoot,CompoundRoot继承了ArrayList,提供了额外的方法,push()和pop()方法用来对root对象中包含的数据进行存取,所以说CompoundRoot是一个栈结构。
.valuestack中的context对象时ognlcontext,他实现了map接口在OgnlValueStack类中,
如何在页面查看valuestack
<s:debug/>
在编码中获去ValueSatck的三种方法
ValueSatck = ActionContext.getContext.getValueStack();
//ActionContext为Action的上下文,有重要的6大对象
//valueStack,parameters,request,session,application,attr
//ognl表达式需选择一个作为根对象root,默认是valuestack因此不用
//添加#,但是使用其他五个对象,就必须添加#前缀
ValueStack valueStack = ServletActionContext.getValueStack(ServletActionContext.getRequest());
//SerlvetActionContext继承了ActionContext,
struts2输出标签
导入s标签
<%@ taglib uri="相应的标签版本" prefix="s"%>
property标签(获取输出对象内容)
<s:property value="OGNL表达式,用于获取需要输出的数据"
default="当不能获取数据时显示的内容" escapeHtml="是否针对html
标签进行实体化字符处理" />
iterator标签(进行迭代)
<s:iterator value="OGNL表达式,用于获取需要显示的集合数据"
var="循环控制变量,每次从value集合中获取一个元素,赋值给这个变量,默认存储在page中" status="循环状态变量,包括属相值index下标序号count输出数据的序号,first是否为第一行数据,last判断是否为最后一个元素,even偶数序号,odd奇数序号" begin="起始下标值" end="终止下标值" step="遍历的步长值"></s:iterator>
<s:checkboxlist list="是一个OGNL表达式获取选项集合" name="对应提交数据的属性名称"label="提示的信息" value="默认选中值"/>
struts2中的默认3个特殊运算 $ % #
1.%{}用于实现强制OGNL计算;标签中href默认为固定的字串,不是OGNL表达式计算,如果在href后需要定义OGNL表达式计算,则需要使用%
<s:url var="u1" action="test_load.action">
<s:param name="id" value="id"/>
</s:url>
<s:a href="%{#u1}">修改</s:a>```
•set标签用于将某个变量设置到指定的范围中,等同于setAttribute()方法
•<s:set var="变量名称" scope="存储范围" value="存储的数据"></s:set>
•Struts 2提供了三个标签用于进行分支流程控制,分别是if标签、else if标签、else标签。其中if标签、else if标签提供了一个test属性用来进行判断
成绩为:<s:property value="#parameters.score"/><br/>
<s:if test="#parameters.score[0]> 85">优秀</s:if>
<s:elseif test="#parameters.score[0]>75">良好</s:elseif>
<s:elseif test="#parameters.score[0]>=60">及格</s:elseif>
<s:else>不及格</s:else>
•Struts 2中提供append标签用于将多个集合拼接组合成一个集合,采用的是深度优先的合并方法
<s:set var="dd" value="{'1','2','3','4'}"/>
<s:set var="ff" value="{'a','b','c','d'}"/>
<s:append var="list">
<s:param value="dd"/><s:param value="ff"/>
</s:append>
<s:iterator value="#list">
<s:property/>
</s:iterator>
•merge标签同append标签类似,也是用来组合集合成一个新集合,采用的是广度优先的合并方法
<s:set var="dd" value="{'1','2','3','4'}" />
<s:set var="ff" value="{'a','b','c','d'}" />
<s:merge var="list">
<s:param value="dd" />
<s:param value="ff" />
</s:merge>
<s:iterator value="#list">
<s:property />
</s:iterator>
•generator标签可以将指定的字符串分隔成多个子字符串,并将这些子字符串放置到一个集合中
<s:generator separator="," val="%{'ab,fasdjk,t,dsaf'}" var="ddd">
<s:iterator value="#ddd" var="aa">
<s:property/><br>
</s:iterator>
</s:generator>
•subset标签用来取得集合的子集
要求在Action中定义一个选择器
public Decider getMyDecider() {
return new Decider() {
public boolean decide(Object element) throws Exception {
•int i = ((Integer)element).intValue();// 这里是迭代一个整数集合
return (((i % 2) == 0)?true:false); //当范围值为true时表示该元素显示,否则不显示 } }; }
<s:subset source="myList" decider="myDecider">
<s:iterator>
<s:property />
</s:iterator>
</s:subset>
<s:subset source="myList" decider="myDecider" var="dd" />
<s:iterator value="#attr.dd"><s:property /> </s:iterator>
•Struts 2提供bean标签允许直接在JSP页面中创建JavaBean实例,可以使用param标签在该JavaBean实例传入属性值,也可以通过property标签输出该JavaBean实例的属性值
<s:bean name="java.util.Date" var="dd">
<s:param name="year" value="1900"/>
</s:bean>
•会在页面生成一个 debug 链接,展开能看到ValueStack中的内容,该页面有显示用#key能获取到Stack Context中的值
<s:debug/>
Struts2默认提供四种主题
•Simple主题:最简单的主题
•XHTML主题:默认主题,使用常用的HTML技巧
•CSS_XHTML主题: 使用CSS实现的XHTML主题
•AJAX主题:基于XHTML主题,但是使用了AJAX功能
允许自定义修改
<s:form action="test_add.action">
<s:textfield name="username" label="用户名称 " theme="simple" />
<s:fielderror fieldName="username"/>
</s:form>
最后
以上就是帅气帽子为你收集整理的struts2基础探索之OGNL表达式详解的全部内容,希望文章能够帮你解决struts2基础探索之OGNL表达式详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复