struts2 的web 项目中为了方便的编写jsp,标签是最好的选择~~
~~struts2 标签库的定义在**-core-版本号.jar META-INF 路径下找到struts-tags.tld文件;使用该标签需要在web 项目里面导入标签库:
A:在web.xml文件 (默认 可以省略)
1. <taglib>
2. <taglib-uri>/struts-tags</taglib-uri>
3. <taglib-location>/WEB-INF/lib/*.jar</taglib-location>
4. <taglib>
B:在jsp 导入标签的定义
1. <%@ taglib prefix="s" uri="/struts-tags"%>
注意uri,上面定义的是默认写法
~~ struts2 利用了内建的ognl表达式,它基于XWork,增加了对ValueStack的支持
,在jsp里面通过ognl访问属性,struts2会自动搜寻栈内的所有实体。直到找到位置。
如:#person.address.ip 等于 person.getAddress().getIp();翻译结果为条用get方法
或是jstl的${person.address.ip}
~~<s:if>用法
A:直接写表达式
1. <s:set name='china' value='china'>
2. <s:if test="${china=='china'}">show</s:if>
3. result: show
4. <s:set name="count" value="99">
5. <s:if test="${count>0}">bigger than 0</s:if>
6. <s:else>not</s:else>
7. result: bigger than 0
B:在遍历里面使用判断:
1. <s:iterator id="id" value="label">
2. <s:if test="%{#id.attrValueId!=0}">
3. <s:property value="#id.attrValue" />
4. <s:property value="#id.countAll" /> <s:property value="#id.countRequest" />
5. </s:if>
6. <s:else>
7. <s:property value="#id.attrValue" />
8. </s:else>
9. </s:iterator>
label是一个List<Attribu> Attribu 包含属性attrValueId和countAll
在s:iterator域内这是id的值是"id",使用ognl读取遍历对象的方法是 #id
test="%{#id.attrValueId!=0}" 看子对象的属性attrValueId是否为0
<s:property value="#id.attrValue" /> 打印子对象的attrValue属性
C:直接读取对象
1. <s:if test="request.price==null||request.price<=0">
2. </s:if>
读取对象request,判断price是否小于0;
request 可以是如何的javaBean,也可以是基本属性
D:直接读取对象的另一种写法
1. <s:if test="%{aTransactionSummaryBean!=null}">
E:多个条件的判断
1. <s:if test='%{isShowAll=="Y"||isShowAll==null||isShowAll==""}'>
2. <li class="selected">
3. </s:if>
4. <s:else>
5. <li>else
6. </s:else>
isShowAll 为Action 里面的字符串属性
F:直接拿Action里面的boolean 貌似不xing
Action里面
1. private boolean choosed = true;
2. public boolean isChoosed(){
3. return choosed;
4. }
5. <s:if test="choosed"></s:if>
发现这个判断无法正确运行,也许是ognl 是通过get方法来获取对象的,如果在action 里面有下面的方法;
1. public String getChoosed(){
2. return "true";
3. }
上面那个s:if可以正确执行
注意:ognl和jstl标签不能互相嵌套
~~~~<s:iterator >可以遍历 数据栈里面的任何数组,集合等等 ~~
在使用这个标签的时候有三个属性值得我们关注
1. value属性:可选的属性,value属性是指一个被迭代的集合,使用ognl表达式指定,如果为空的话默认就是ValueStack栈顶的集合.
2.id属性:可选属性, 是指集合元素的id
3.status属性:可选属性,该属性在迭代时会产生一个IteratorStatus对象,该对象可以判断当前元素的位置,包含了以下属性方法:
int getCount(); 迭代元素个数
int getIndex(); 迭代元素当前索引
boolean getFirst(); 是否为第一个
boolean getEven(); 是否为偶
boolean getLast(); 是否最后一个
bolean getOdd(); 是否为奇
由于iteratorstatus对象并不是ognl的根对象因此访问需要加上 #访问如下例子:
<s:iterator value=”{’dd’,'bb’,'cc’}” status=”st”>
<s:if test=”#st.odd”>
<s:property value=”#st.index”/>
</s:if>
</s:iterator>
此外:iterator也可以迭代map对象,map对象中有几对key-value 就迭代几次,分别使用
<s:property value=”key”/>
<s:property value=”value”/>
A: 1.如果需要引用valueStack中的值,需要使用这样的形式。
<s:iterator value="#userList" /> //userList在action部分被保存在Request中,所以使用#加属性名来引用值。
2.如果集合的值是通过action的方法,假设我们的action中有一个getListMenu方法,返回一个List集合。
我们可以使用如下的形式来引用这个集合,并用s:iterator来输出。
<s:iterator value="listMenu" />
3.iterator的value使用定义好的方式,如:
<s:iterator value="{1,2,3,4}" /> //这样跌代输出的值就是1.2.3.4这四个值。
B:iterator中输出具体值,如果,在上面我们的list中的对象,有两个属性,都是String类型,一个是name,一个是url。
我们可以这样来引用。
1. <s:property value="name" /> //这样我们将可以输出跌代对象的name属性值。
2. 如果我们希望使用<s:url />来将跳转过后的url进行处理,该如何来做?
<s:url value="%{url}"/> //%{}ognl的表达式,这样的值能够将url的值进行<s:url/>的处理
实际上就是转为绝对路径。这样,我们就可以对付一些因跳转换产生的路径问题。
原因:因为<s:iteratotr />以后,当前的对象应该就在ValueStack顶部了,这样当然的url实际上就是对象的url 属性了
C:使用ognl输出对应的值。
<s:textfield name="loginName" value="%{#request.loginNames}"/>
使用此表达式,会生成一个文本框,并且,如果request.attribute中有loginNames属性,将会做为些文本框的默认值。
如果只使用#request.loginNames在struts2的标签内部,是不会显示任何值的,注意外面加上的%{}附号,才会被正常的使用。
如果希望如EL语言一样直接输出文件,如在一个<a></a>之间的innerHTML文本为#request.loginNames的值,我们只要使用:<s:property value="#request.loginNames" />使可以正常使用!
注:
1.${}是EL语言的 %{}这样的形式是ognl表达式语言的,在struts2的标签内部,使用%{}这样的形式,在标签外部可以使用${}EL语言的方式。如果在struts2的标签内部使用${}这样的方式,会出现以下的错误提示:
According to TLD or attribute directive in tag file, attribute value does not accept any expressions
2.很多时候,我们使用struts2的一些标签,属性是需要接受集合的,如果集合是保存在 request,session,或者是值栈(非根对象的栈顶),可以使用#变量名的方式,如果获取的值是在Action中通过特定的方法来获取,就需要使用如 value="userList"这样的方式,只是去掉了前面的#。
~~~以下几个简单的demo:
s:iterator 标签有3个属性:
value:被迭代的集合
id :指定集合里面的元素的id
status 迭代元素的索引
1:jsp页面定义元素写法 数组或list
1. <s:iterator value="{'1','2','3','4','5'}" id='number'>
2. <s:property value='number'/>A
3. </s:iterator>
打印结果为: 1A2A3A4A5A
2:索引的用法
如果指定了status,每次的迭代数据都有IteratorStatus的实例,它有以下几个方法
int getCount()返回当前迭代了几个元素
int getIndex()返回当前元素索引
boolean isEven()当然的索引是否偶数
boolean isFirst()当前是否第一个元素
boolean isLast()
boolean isOdd()当前元素索引是否奇数
1. <s:iterator value="{'a','b','c'}" id='char' status='st'>
2. <s:if test="#st.Even">
3. 现在的索引是奇数为:<s:property value='#st.index'/>
4. </s:if>
5. 当前元素值:<s:property value='char'/>
6. </s:iterator>
3:遍历map
value可以直接定义为:
1. value="#{"1":"a","2":"b"}"
每个元素以都好隔开。元素之间的key和value 冒号隔开
value也可以是数据栈里面的java.util.Map对象
遍历写法如下:
1. <s:iterator value="map" id="id" status="st">
2. key : <s:property value='key'/>
3. value:<s:property vlaue='value'/>
4. </s:iterator>
当然key 和value 都可以使java 的 Object
3:遍历数据栈.简单的List类,
List<Attr>
class Attr{String attrName;String getAttrName(){return "123";}}
1. <s:iterator value="label" id="id">
2. <s:property value="#id.attrName" />
3. </s:iterator>
当然value 还可以写成 value="%{label}" label可以有.操作
label的属性List 可以写成value="%{label.list}" 相当于:getLabel().getList();
4:遍历2个list;
List<AttrName> attrN {color,size,style}
List<AttrValue> attrV {red,20,gay}
这2个list的元素是一一对应的,一个attrN对应一个attrV
1. <s:iterator value="%{attrN }" id="id" status="status">
2. index is : <s:property value='status.index'/>
3. attrName is : <s:property value='id'/> or <s:property value='%{id}'/>
4. attrName is : <s:property value='%{attrV[#status.index]}'/>
5. </s:iterator>
转自 http://hi.baidu.com/%B3%BE%CA%C0%CE%DE%CB%AB/blog/item/58355b42a13f011a72f05d7b.html
分享到:
相关推荐
至于标签,Struts2提供了丰富的标签库,使得开发者可以更方便地在JSP页面中进行数据绑定和控制流操作,如`s:property`用于显示Action属性的值,`s:if`和`s:choose`进行条件判断等,这大大减少了纯Java代码的使用,...
有关struts2下载组件的具体介绍我就在此略过了,看此文的同志想必大多是碰到这样让人很是不爽的问题。 下面就将该问题的最终解决办法介绍如下。 问题概要: 在struts2中使用result里type="stream"的结果类型时,...
在"struts2+spring2.5+hibernate3.3"的组合中,我们看到的是经典的Java企业级应用架构: 1. **Struts2**:这是一个用于构建Java Web应用程序的MVC框架。Struts2提供了强大的动作调度、拦截器、结果类型等特性,帮助...
Struts2-Vuln 本系列文章将详细分析 Java 流行框架 Struts2 的历史漏洞,今后关于 Struts2 新的漏洞分析,也将更新于 项目上。该系列仅是笔者初学 Java代码审计 的一些记录,也希望能够帮助到想学习 Java代码审计 的...
通过理解其基本结构、集成步骤以及如何在JSP中使用标签库,我们可以轻松地在Struts应用中实现动态菜单功能。对于想要深入研究的开发者,还可以探索Struts-menu的更多高级特性,如动态加载菜单、国际化支持等。
学习struts1-tiles标签的好文档,初学者只要花很少的时间即可学会使用,转载于别处
【标题】"图片批量上传-转载"涉及到的主要技术点是基于Web的文件上传功能,特别是针对图片的批量处理。在互联网应用中,用户可能需要一次性上传多张图片,这就需要前端与后端协同实现批量上传的功能。这里提到的工具...
【Struts】Struts是Java EE平台上的一个MVC框架,面试可能会涉及到Action、Interceptor、Result、Form Bean等概念,以及如何处理表单提交、拦截器的实现和自定义标签的使用。理解Struts的工作原理和最佳实践是必不可...
`Struts2拦截器(Interceptor)`通常与`Filter`类似,用于增强MVC框架中的请求处理,但它们更专注于业务逻辑层面,而`Filter`更通用,可以在任何Servlet容器中使用。`Servlet,Filter的url-pattern详解`文件可能解释了...
作者强调了版权的重要性,要求在转载时必须注明作者信息,并禁止任何未经授权的出版行为。这一规定既体现了作者对知识分享的支持态度,也反映了其维护自身知识产权的决心。 #### 参考网站及资料 为了确保内容的...
2009-03-05 14:06 155509 34856 常见的专业问题解决办法\html中rel与rev的关系(转载)_我的幅度.mht 2009-03-05 19:33 232863 45314 常见的专业问题解决办法\Html标签大全_破巢.mht 2006-11-01 21:11 107135 101736...