首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

strut2 值栈跟ognl(二)

2012-07-26 
strut2 值栈和ognl(二){zhangming,xiaoi,liming} /s:iterator value#list idn?s:propert

strut2 值栈和ognl(二)
{'zhangming','xiaoi','liming'}" />
<s:iterator value="#list" id="n">
?<s:property value="n"/><br>
</s:iterator>

生成一个Map对象:
<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />
<s:iterator value="#foobar" >
?<s:property value="key"/>=<s:property value="value"/><br>
</s:iterator>

Set标签用于将某个值放入指定范围。
scope:指定变量被放置的范围,该属性可以接受application、session、request、 page或action。如果没有设置该属性,则默认放置在OGNL Context中。
value:赋给变量的值.如果没有设置该属性,则将ValueStack栈顶的值赋给变量。


property标签:
property标签用于输出指定值:
<s:set name="name" value="'kk'" />
<s:property value="#name"/>
default:可选属性,如果需要输出的属性值为null,则显示该属性指定的值
escape:可选属性,指定是否格式化HTML代码。
value:可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值。
id:可选属性,指定该元素的标识

-----------------------

采用OGNL表达式判断对象是否存在于集合中:
对于集合类型,OGNL表达式可以使用in和not in两个元素符号。其中,in表达式用来判断某个元素是否在指定的集合对象中;not in判断某个元素是否不在指定的集合对象中,如下所示。
in表达式:
<s:if test="'foo' in {'foo','bar'}">
?? 在
</s:if>
<s:else>
?? 不在
</s:else>

not in表达式:
<s:if test="'foo' not in {'foo','bar'}">
?? 不在
</s:if>
<s:else>
?? 在
</s:else>

-----------------------

OGNL表达式的投影功能:

除了in和not in之外,OGNL还允许使用某个规则获得集合对象的子集,常用的有以下3个相关操作符。
?:获得所有符合逻辑的元素。
^:获得符合逻辑的第一个元素。
$:获得符合逻辑的最后一个元素。
例如代码:
<s:iterator value="books.{?#this.price > 35}">
????? <s:property value="title" /> - $<s:property value="price" /><br>
</s:iterator>
在上面代码中,直接在集合后紧跟.{}运算符表明用于取出该集合的子集,{}内的表达式用于获取符合条件的元素,this指的是为了从大集合books筛选数据到小集合,需要对大集合books进行迭代,this代表当前迭代的元素。本例的表达式用于获取集合中价格大于35的书集合。
public class BookAction extends ActionSupport {
?private List<Book> books;
?....
?@Override
??? ?public String execute() {
??????? ??books = new LinkedList<Book>();
??????? ??books.add(new Book("A735619678", "spring", 67));
??books.add(new Book("B435555322", "ejb3.0",15));
?}
}


-----------------------

举例如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
??? pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
request.setAttribute("user", "itcast");
request.getSession().setAttribute("user_session", "itcast-session");

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>OGNL</title>
</head>
<body>
<s:property value="#request.user"/><br>
<s:property value="#session.user_session"/><br>
<s:property value="name"/> 或 ${name }<br><br>

采用OGNL表达式创建List/Map集合对象:<br>
1)创建List集合对象:不指定scope时,默认存放在OGNL Context中:
<s:set var="list" value="{'第一个','第二个','第三个'}"/>
<!-- s:iterator标签在迭代集合时有个特点:会把当前迭代的对象放在值栈的栈顶中 -->
<s:iterator value="#list">
?<s:property/>;
</s:iterator>
<br>
2)创建Map集合对象:
<s:set var="map" value="#{'key1':'val1', 'key2':'val2','key3':300}"/>
<s:iterator value="#map">
?<s:property/>;
</s:iterator> 或
<s:iterator value="#map">
?<s:property value="key"/>=<s:property value="value"/>;
</s:iterator>
<br><br>
采用OGNL表达式判断对象是否存在于集合中(in/not in):
<s:if test="'第一个' in #list">

</s:if>
<s:else>
不在
</s:else> ------

<s:if test="'第一个' in {'第一个','第二个'}">

</s:if>
<s:else>
不在
</s:else>
<br>

</body>
</html>

热点排行