struts2标签总结_动力节点Java学院整理

先看一下Struts2标签的分类吧。然后分类总结一下即可。

由于控制标签用的比较多,所以放在了前边。好首先看一下控制标签吧。

一、控制标签,JSTL大家应该都使用过,其实Struts2的控制标签和那个特别像的,主要是对EL表达式满足不了的进行补充使用。这里简单看一下吧:

1. if……elseif……else,用来控制选择输出的标签;

<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>s:if标签测试</title>
</head>
<body>
<!-- 在Stack Context中定义一个age属性,其值为29 -->
<s:set name="age" value="29"/>
<!-- 如果Stack Context中的age属性大于60 -->
<s:if test="#age>60">
  老年人
</s:if>
<!-- 如果Stack Context中的age属性大于35 -->
<s:elseif test="#age>35">
  中年人
</s:elseif>
<!-- 如果Stack Context中的age属性大于15 -->
<s:elseif test="#age>15">
  青年人
</s:elseif>
<s:else>
  少年
</s:else>
</body>
</html>

</span>

2.append:用于将多个集合拼接成一个新的集合;

<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>使用s:append标签拼接集合和Map</title>
</head>
<body>
<!-- 使用append将List和Map集合拼接在一起
  新集合实际上是Map集合,其名字为newList -->
<s:append var="newList">
  <s:param value="#{'Java':'ljh',
    'C#':'lsz'}" />
  <s:param value="#{'0629',
    '0404'}" />
</s:append>
<table border="1" width="280">
<!-- 使用iterator迭代newList集合 -->
<s:iterator value="#newList" status="st">
  <tr <s:if test="#st.odd">
    style="background-color:#bbbbbb"</s:if>>
    <td><s:property value="key"/></td>
    <td><s:property value="value"/></td>
  </tr>
</s:iterator>
</table>
</body>
</html>
</span>

3.generator:是一个字符串解析器,用于将一个字符串解析成一个集合;

<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>使用s:generator生成集合</title>
</head>
<body>
<table border="1" width="240">
<!-- 使用generator标签将指定字符串解析成Iterator集合
  在generator标签内,得到的List集合位于ValueStack顶端 -->
<s:generator val="'Java
  ,C#,
  C++'" separator=",">
<!-- 没有指定迭代哪个集合,直接迭代ValueStack顶端的集合 -->
<s:iterator status="st">
  <tr <s:if test="#st.odd">
    style="background-color:#bbbbbb"</s:if>>
    <td><s:property/></td>
  </tr>
</s:iterator>
</s:generator>
</table>
</body>
</html></span>

4.iterator:是一个迭代器,用于将集合迭代输出,这个比较使用哈,前边都有,不再举例;

5.merge:也是用于将多个集合拼接成一个新的集合,但是与append不同。append是将集合依次排列进行拼接,merge是第一个集合的第一个,第二个集合的第一个……第一个集合的第二个,第二个集合的第二个……;

<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>使用s:merge标签迭代Map</title>
</head>
<body>
<s:merge id="newList">
  <s:param value="#{'Java':'ljh',
    'C#':'lsz'}" />
  <s:param value="#{'0629',
    '0404'}" />
</s:merge> 

<table border="1" width="320">
<s:iterator value="#newList" status="st">
  <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
    <td><s:property value="key"/></td>
    <td><s:property value="value"/></td>
  </tr>
</s:iterator>
</table>
</body>
</html></span>

6.sort:这个标签用于将集合进行排序;

<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>使用s:sort对集合元素进行排序</title>
</head>
<body>
<!-- 定义一个Comparator实例 -->
<s:bean var="mycomparator" name="org.ljh.app.util.MyComparator"/>
<!-- 使用自定义的排序规则对目标集合进行排序 -->
<s:sort source="{'Java'
  ,'C#'
  ,'C++'
  ,'Ajax'
  ,'XML'}"
  comparator="#mycomparator"
  var="sortedList"/>
输出page范围的sortedList属性:<br/>
${pageScope.sortedList}
<table border="1" width="300">
<!-- 迭代page范围内的sortedList属性 -->
<s:iterator status="st" value="#attr.sortedList">
  <tr <s:if test="#st.odd">
    style="background-color:#bbbbbb"</s:if>>
    <td><s:property/></td>
  </tr>
</s:iterator>
</table>
</body>
</html></span>
<span style="font-size:18px;">public class MyComparator implements Comparator
{
 //决定两个元素大小的方法
 public int compare(Object element1, Object element2)
 {
  //根据元素字符串长度来决定大小
  return element1.toString().length()
   - element2.toString().length();
 }
}</span>

7.subset:这个标签用于截取集合的部分元素,形成新的子集合。

<span style="font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>使用s:subset标签截取集合元素</title>
</head>
<body>
<!-- 定义一个Decider Bean -->
<s:bean var="mydecider" name="org.ljh.app.util.MyDecider"/>
<!-- 使用自定义的Decider实例来截取目标集合,生成子集
  指定var属性,将生成的Itertor放入pageScope中 -->
<s:subset source="{<span style="font-family: SimSun; ">'Java'</span></span><pre name="code" class="html"><span style="font-size:18px;"> ,'C#'
  ,'C++'
  ,'Ajax'
  ,'XML'</span></pre><span style="font-size:18px;">}" decider="#mydecider"var="newList"/>直接输出page范围的newList属性:<br/>${pageScope.newList}<table border="1" width="240"><!-- 迭代page范围内的newList属性 --><s:iterator status="st" value="#attr.newList"><tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>><td><s:property/></td></tr></s:iterator></table></body></html></span>
<span style="font-size:18px;">//用户自定义的Decider类,实现了SubsetIteratorFilter.Decider接口
public class MyDecider
  implements SubsetIteratorFilter.Decider
{
  //实现Decider接口必须实现的decide方法,
  //该方法决定集合中的元素是否被选入子集
  public boolean decide(Object element) throws Exception
  {
    String str = (String)element;
    //如果集合元素(字符串)中包含Java EE子串,即可被选入子集
    return str.indexOf("Java") > 0;
  }
}</span>

二、数据标签,自我感觉数据标签用的不是很多:

action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.
如果指定了executeResult参数的属性值为true,该标签会把Action的处理结果(视图资源)包含到本页面中.
使用action标签指定属性有:

id: 可选属性,作为该Action的引用ID
     name:必选属性,指定调用Action
     namespace:可选属性,指定该标签调用Action所属namespace
     executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false,不包含.

<s:actionname="actionTag!default" executeResult="true"namespace="/generic/dataTag">
<paramname="username" value=" "/>给action属性复制
<paramname="email"    value=" "/>
</s:action>

bean 实例化一个javabean 使用Param传入属性 (get/set)
name 实例化的javabean的实现类
var可选  指定则实例放入栈的上下文 允许用var直接使用
注意:bean标签内创建javabean实例位于栈顶,bean结束移除值栈,除非指定var则通过上下文访问

date格式化输出日期,指定日期与当天日期的时间差
formart  指定格式格式日期       注意:不欲nice同时指定,如果同时指定。则忽略formart
nice  是否指定日期与当前日期差值
name必填  格式化的日期值
var  对象放入值栈,在date结束可以通过该属性的值引用

<constanname="sruts.custom.i18n.resources"value="ApplicationResources" />
<s:datename="#date" formart="yyyy年MM月dd日"/>

debug标签:

用于辅助调试.在页面上生成超链接,可以查看值栈,和StackContext中所有信息
id 钙元素的一个引用id

include:讲一个jsp或者servlet包含到当前页面
value  包含的JSP或Servlet。
可以指定多个param子标签传参

param标签:为其它标签提供参数
name设置的参数的名字 (set)  value设置的参数的值
用法

①<paramname="color"> 
②<paramname="color" value="   'color'   "/>

push:将某个值放到值栈的栈顶
value必填:指定放入值栈的栈值!但是只在push标签内,一旦超出,刚刚放入的对象立即被移除

用法:

<s:pushvalue="#session.user">
<s:propertyvalue="username">
<s:propertyvalue="sex">
<s:propertyvalue="emai">
</s:push>

set:用于将某个只放入指定范围内
定义一个新变量。将已有值放入新变量。并放入指定范围
value  指定一个表达式,计算的结果赋变量,如果没有指定value属性,默认将栈顶对象赋给变量。
var  指定该属性,改值放入到值栈中
scope指定新变量防止的范围,可选application,session request page action(默认)  如果指定为action放入request并放入action值栈
name变量名字

i18n  text标签  支持国际化信息
i18n将资源包放入值栈   name资源属性名字   指定资源包的基名
text从资源包中获取信息 title   获取键为title的消息
通过i18n放入的资源包只能在标签体内访问
text可以单独使用。首先查找资源包的基名与调用action类名相同的资源包,意味着,可以在action类所在的包中创建与Action类名相同的的资源文件,可以嵌套param指定消息文本的参数,顺序对应参数索引顺序
<s:i18nname="AppliactionResources">
<s:textname="title"/>    name资源属性名字   id指定属性,文本内容不会输出,而是保存在值栈中,在text结束后,可以通过属性的值来引用
</s:i18n>

public class TextTagAction  extends ActionSupport{}   《topic-21》

url标签用于创建URL地址,定义param附加请求参数
action value  指定生成URL的Action和URL。前一个会附加.action。如果两个都没有则以当前地址为地址值
 achor 可选  指定url的锚点
encode 可选   对指定参数进行编码 不支持cookie改写url支持session
escapeamp  是否将&转义为&amp
var  将链接值放入到值栈
includeContext是否将当前上下文包含在URL地址
includeParams是否包含请求参数,改属性值只能为none,getall
method 指定使用action的方法
namespace指定action所属的命名空间
portletmode指定portle模式
scheme指定url使用的协议

property标签,用于输出值栈中的对象的属性值
value指定要输出的对象属性  没有则输出栈顶
default  可选   value为null输出改值
escape 是否专一输出内容中的html

三、表单标签,这个就是form下的Struts2提供的标签,供界面显示用的,其实用的更少,一般情况下,我们都会拿easy-ui,dwz等一些专门做界面的框架进行替换。其实说简单一点就像HTML里边的各种标签,这里不再进行赘述

四、非标单标签,主要用于生成一些非表单的可视化元素,例如tab页面,输出HTML页面的树形结构等,当然也用来显示Action里封装的信息。简单介绍一下:

简单看一个componet标签:

<span style="font-size:18px;"><html>
<head>
  <title>使用s:component标签</title>
</head>
<body>
<h3>使用s:component标签</h3>
使用默认主题(xhtml),默认主题目录(template)<br/>
使用mytemplate.jsp作为视图组件
<s:component template="mytemplate.jsp">
  <s:param name="list" value="{'Java'
  ,'C#'
  ,C++'}"/>
</s:component>
<hr/>
使用自定义主题,自定义主题目录<br/>
使用myAnotherTemplate.jsp作为视图组件
<s:component
  templateDir="myTemplateDir"
  theme="myTheme"
  template="myAnotherTemplate.jsp">
  <s:param name="list" value="
  {'Java'
  ,'C#'
  ,C++'}"/>
</s:component>
</body>
</html>
</span>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • struts2简介_动力节点Java学院整理

    本文为大家讲解了Struts2框架的入门知识,供大家参考,具体内容如下 1.Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发.框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2.Struts2框架的流程原理 1)请求先到达Filter中央控制器 2)然后为Action创建代理类 3)将各个服务存放在拦截器中,执行完拦截器后再去执行action类行action类,action类调用service,再调用dao 4)得到结果字符串,创

  • Struts2修改上传文件大小限制方法解析

    首先struts上传最大大小由两个地方决定.  · struts.multipart.maxSize决定整个post的form最大是多大,所以这个限制是最初的.默认大小是接近2M,在struts的default.properties中定义.  · fileuploadInterceptor中可以定义maximumSize最大文件大小. 最初定义在struts.xml中定义了没有生效,后来发现在工程中的struts.properties中已经设置过,所以后来被覆盖了,更改struts.proper

  • Struts2 使用OGNL遍历map方法详解

    一.Action中的代码:MapAction.java package com.zx.demo.action; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.opensymphony.xwork2.ActionSupport; import com.zx.demo.model.Product; import com.zx.d

  • Struts2 通过ognl表达式实现投影

    projection(投影):俗话说就是过滤,就是过滤器把符合条件的过滤出来 struts.xml: <package name="ognl" namespace="/ognl" extends="struts-default"> <action name="pro" class="cn.edu.hpu.ognl.OgnlAction4"> <result name="

  • struts2标签总结_动力节点Java学院整理

    先看一下Struts2标签的分类吧.然后分类总结一下即可. 由于控制标签用的比较多,所以放在了前边.好首先看一下控制标签吧. 一.控制标签,JSTL大家应该都使用过,其实Struts2的控制标签和那个特别像的,主要是对EL表达式满足不了的进行补充使用.这里简单看一下吧: 1. if--elseif--else,用来控制选择输出的标签: <span style="font-size:18px;"><html xmlns="http://www.w3.org/1

  • Struts1和struts2的区别_动力节点Java学院整理

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简单来说二者的区别是: 一个是Stuts1 ,一个是Stuts2,这是最大的区别,技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强:而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个act

  • JSP自定义标签-标签属性_动力节点Java学院整理

    对自定义标签添加一些属性,可以使我们的标签功能更加灵活和复用.例如前一篇博客使用简单标签来对标签体内容执行一定的次数,就无法在标签上规定要执行的次数,必须在标签处理器类中修改,很不方便,如果使用带属性的标签就能很好的解决这个问题. 要想使简单标签具有属性,通常需要满足以下两个步骤: ① 在标签处理器类中定义属性,同时为每个属性生成setter方法: ② 在TLD文件中对于的<tag>标签下添加属性的<attribute>标签,同时<attribute>标签下定义其从标签

  • struts2拦截器_动力节点Java学院整理

    如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器): <interceptor-ref name="checkbox"> <param name="uncheckedValue">0</param> </interceptor-ref>

  • git标签管理_动力节点Java学院整理

    发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的. Git有commit,为什么还要引入tag? "请把上周一的那个版本打包发布,commit号是6a5819e..." &qu

  • struts2数据处理_动力节点Java学院整理

    Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理.值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:ValueStack一种数据结构,操作数据的方式为:先进后出 OGNL : Object-GraphNavigation Language(对象图形导航语言)将多个对象的关系使用一种树形的结构展现出来,更像一个图形,那么如果需要对树形结构的节点数据进行操作,那么可以使用 对象.属性 的方式进行操作,OGNL技术底层采用反射实现. 一:数据的提交方式

  • Java异常继承结构解析_动力节点Java学院整理

    Java异常类层次结构图: 异常的英文单词是exception,字面翻译就是"意外.例外"的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误.比如使用空的引用.数组下标越界.内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图.错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了,并且运行期间的错误往往是难以预料的.假若程序在运行期间出现了错误

  • Nginx简介_动力节点Java学院整理

    1.什么是Nginx Nginx来自俄罗斯的Igor Sysoev在为Rambler Media(http://www.rambler.ru/)工作期间,使用C语言开发了Nginx.Nginx作为Web服务器,一直为俄罗斯著名的门户网站Rambler Media提供着出色.稳定的服务. Igor Sysoev将Nginx的代码开源,并且赋予其最自由的2-clause BSD-like license许可证.由于Nginx使用基于事件驱动的架构能够并发处理百万级别的TCP连接,高度模块化的设计和自

  • web压力测试工具_动力节点Java 学院整理

    0. Grinder –  Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提供了便利. 支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行管理.根据项目网站的说法,Grinder的 主要目标用户是"理解他们所测代码的人--Grinder不仅仅是带有一组相关响应时间的'黑盒'测试.由于测试过程可以进行编码--而不是简单地脚本 化,所以程序员能测试应用中内部的各个层次,而不仅仅是通过用户界面测试响应时间. 1. Pylot -Pylot 是

  • 深入理解Java中的final关键字_动力节点Java学院整理

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如

随机推荐