上一篇我们一起探讨了Struts2中的OGNL表达式的知识,本篇我们一起来学习一下关于Struts2标签的使用,包括:基础标签:property、set、bean、include;判断标签:if elseif else、iterator;错误标签:FieldError

  首先先把基础User类和Action类创建好,User类里面添加两个属性:name和password,分别实现getter、setter方法;Action类实现ModelDriver<T>接口,来实现User对象参数传递。

public class OGNL extends ActionSupport implements ModelDriven<User>{

    private User user = new User();

    @Override
public String execute() throws Exception {
return SUCCESS;
} public User getModel() {
return user;
}
}

  下面我们就开始本篇的探讨,首先是property标签,这个标签我们并不陌生,在之前的文章中我们已经多次使用,通过这个标签,我们可以很容易的从值栈中取出值,所以你一定知道这个标签是干嘛用的了,对就是用去取,存在于值栈中的值。

<ol>
<li>s:property:<s:property value="name" /></li>
<li>s:property 取值为字符串:<s:property value="'name'" /></li>
<li>s:property 设定默认字符串:<s:property value="admin" default="管理员"/></li>
<li>s:property 设定HTML:<s:property value="'<span>按钮</span>'" escape="true"/></li>
<li>s:property 设定HTML:<s:property value="'<span>按钮</span>'" escape="false"/></li>
</ol>

  我们看一下页面反馈的信息:

  

  简单解释一下,Struts会认为我们的Value中的内容是OGNL表达式,当我们需要Struts不把我们的Value当成OGNL时,我们需要添加单引号,这样Struts就不再将我们的Value当做OGNL来处理了。escape="true"标签相当于告诉Struts你不要将我的内容转化,直接给我原封不动的输出。


  下面我们看下一个基础标签:set,你一定猜到他的作用了,对就是帮我们修改名称。

<ol>
<li>set 设定adminName值(默认为request和ActionContext)<s:set var="adminPassword" value="password"/></li>
<li>set 从request取值:<s:property value="#request.adminPassword"/></li>
<li>set 从ActionContext取值:<s:property value="#adminPassword"/></li> <li>set 设定范围(2.1中name已经删除)<s:set name="pagePassword" value="password" scope="page"/></li>
<li>set 从相应范围取值:<%=pageContext.getAttribute("pagePassword") %></li> <li>set 设定范围(2.1之后的版本都是采用var)<s:set var="varPassword" value="password" scope="session"/></li>
<li>set 从相应范围取值:由于设置数据范围是session所以Property没办法得到值<s:property value="#varPassword"/></li>
<li>set 从相应范围取值:<s:property value="#session.varPassword"/></li>
</ol>

  页面显示结果:

  

  简单介绍一下,我们通过var属性可以将value属性的名称进行修改,从而方便我们的使用。scope则是用来设置我们的数据范围。


  下面我们再来看一下bean标签是使用,bean简单java对象,是的就是用来在页面进行对象操作的属性。bean的生命周期从<s:bean>开始,到</s:bean>结束,为了观察bean的生命周期,我通过将<s:debug>标签设置在bean内外,来查看值栈中的数据情况,可以很清晰的发现bean的生命周期。

<ol>
<li>bean 定义bean,并使用parama来设定新的属性值:
<s:bean name="com.edu.model.User">
<s:param name="name" value="'张三'"></s:param>
<s:property value="name"/><br/>
</s:bean>
</li> <li>bean 定义bean,并使用parama来设定新的属性值:
<s:bean name="com.edu.model.User" var="hpugs">
<s:param name="name" value="'rbb'" ></s:param>
<s:property value="#hpugs.name"/>
bean中查看debug:<s:debug></s:debug>
</s:bean>
<s:debug></s:debug>
</li>
</ol>

  <s:debug>在bean里面:

  

  <s:debug>在bean外面:

  

  关于set的使用,大家一定要牢记bean的生命周期。


  下面我们来一起看一下include标签的使用,include引用,是的,我们可以通过include标签将我们的外部html、jsp页面引入到我们的页面中。为了测试我们需要创建一个html、jsp页面,这里我们重点看一下关于中英文的显示:

<ol>
<li>include include1.html英文内容:<s:include value="/include1.html"/></li> <li>include include2.html中文内容:<s:include value="/include2.html"/></li> <li>include include22.html中文内容(页面设置字符编码为utf-8):<s:include value="/include22.html"/></li> <li>include include3.jsp英文内容:<s:include value="/include3.jsp"/></li> <li>include include4.jsp中文内容:<s:include value="/include4.jsp"/></li> <li>html中包含中文使用include引用时,无法显示,通过设置字符编码为utf-8完美解决,设置为GBK仍然无法显示。通过修改浏览器的默认编码方式显示没有用。查看修改工程的编码格式,完美解决。所以使用include标签是,一定要注意页面编码与工程编码保持一致</li>
<li>jsp文件引用尚未发现问题,即使编码格式不一致,仍然可以显示</li>
</ol>

  页面显示结果:

  

  感兴趣的朋友可以尝试,不过需要指出的是,一般开发中不建议使用include标签。


  下面我们探讨一下if elseif else选择标签:

<ol>
<li>if elseif else: age=<s:property value="#parameters.age"/> 此种写法不建议使用 </li>
<li>if elseif else: age=<s:property value="#parameters.age[0]"/> </li>
<li>actionMessages:<s:property value="actionMessages"/> </li>
<li>
不加[0]:
<s:if test="#parameters.age < 18">to young!</s:if>
<s:elseif test="#parameters.age < 60">great</s:elseif>
<s:else>old</s:else>
</li>
<li>
加[0]:
<s:if test="#parameters.age[0] < 18">to young!</s:if>
<s:elseif test="#parameters.age[0] < 60">great</s:elseif>
<s:else>old</s:else>
</li>
<li>
parameters.age == null:<s:if test="#parameters.age[0] == null">true</s:if><s:else>false</s:else><br/>
parameters.aaa == null:<s:if test="#parameters.aaa == null">true</s:if>
</li>
<s:debug></s:debug>
</ol>

  页面显示结果:

  

  内容很简单,写过if else的小伙伴一定不会感到困难,只不过需要指出的是,当我们进行值操作时,一定要使用"[索引]"


  使用iterator遍历一个值。一个可迭代的值可以是Java.util.Collection,java.util.Iterator中的任何一个。

  参数

Name Required Default Evaluated Type Description
begin false 0 false Integer 若指定,那么迭代器将从该索引开始
end false 该'values' List或array的大小, 或若'step'为负则为0 false Integer 若指定,那么迭代器将到该索引结束(含该索引)
id false   false String 已过期。用'var'取代
status false false false Boolean 若指定,那么在每次迭代时,迭代状态的实例将被压入堆栈
step false 1 false Integer 若指定,在每次迭代时,迭代索引将加上此值。它可以是一个负值,在这种情况下,'begin'必须是大于'end'
value false   false String 可迭代源对象进行遍历,另外对象本身将进入一个新创建的列表
var false   false String 名字用于将引用的值推入值栈

  我们的页面处理部分:

<ol>
<li>
<s:iterator value="{'abc', 'def', 'gho', '123', '456', '789', '147'}" status="type">
iterator遍历:<s:property /> | 遍历过的元素总数:<s:property value="#type.count"/> | 遍历过的元素索引:<s:property value="#type.index"/> | 当前是偶数:<s:property value="#type.even"/> | 当前是奇数:<s:property value="#type.odd"/> | 是第一个元素吗:<s:property value="#type.first"/> | 是最后一个元素吗:<s:property value="#type.last"/><br/>
</s:iterator>
</li>
</ol>

  页面结果:

  

  对于brgin、end、step等的使用,大家自行测试吧。


  下面我们看一下iterator操作key:value:

<ol>
<li>
<s:iterator value="#{1:'a',2:'b',3:'c'}">
<s:property value="key"/> | <s:property value="value"/><br/>
</s:iterator>
</li> <li>
<s:iterator value="#{1:'a',2:'b',3:'c'}" var="abc">
<s:property value="#abc.key"/> | <s:property value="#abc.value"/><br/>
</s:iterator>
</li>
</ol>

  页面结果:

  


  最后简单看一下s:fielderror、s:actionerror、s:actionmessage的使用,首先我们在Action中将这三个参数传递进去。

public String execute() throws Exception {
this.addFieldError("fielderror.text", "FieldError出错");
this.addActionError("ActionErrorMessage");
this.addActionMessage("ActionMessage");
return SUCCESS;
}

  我们的jsp页面处理:

<li>
<s:iterator value="#{1:'a',2:'b',3:'c'}">
<s:property value="key"/> | <s:property value="value"/><br/>
</s:iterator>
</li> <li>
<s:iterator value="#{1:'a',2:'b',3:'c'}" var="abc">
<s:property value="#abc.key"/> | <s:property value="#abc.value"/><br/>
</s:iterator>
</li>

  页面处理结果:

  


  关于标签的使用就先和大家分享到这里,后续内容持续更新中...

Struts2之标签使用的更多相关文章

  1. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】

    一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...

  2. Struts2常用标签

    Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的 ...

  3. Struts2的标签库(五)——表单标签

    Struts2的标签库(五) --表单标签 几个特殊的表单标签的使用: 1.checkboxlist标签 该标签用于创建多个复选框,用于同时生成多个<input type="check ...

  4. Struts2的标签库(四)——数据标签

    Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来 ...

  5. Struts2的标签库(三)——控制标签

    Struts2的标签库(三) --控制标签 1.if/elseif/else标签 用于分支控制,取代JSP中的if语句,根据一个boolean(test属性的值)值判断是否进行下一步运算或者输出等. ...

  6. Struts2的标签库(二)——OGNL表达式

    Struts2的标签库(二) --OGNL表达式 1.Struts2中的OGNL表达式增加了ValueStack的支持. 注:ValueStack--实际上是一个容器对象,该对象在启动Struts2框 ...

  7. Struts2的标签库(一)——使用Struts2的标签库

    Struts2的标签库(一) --使用Struts2的标签库 1.Struts2的标签库其实就是一个自定义的标签库,所以它也有它的标签处理类和标签库定义文件: 2.和所有自定义标签一样,我们可以找到S ...

  8. JavaWeb框架_Struts2_(五)----->Struts2的标签库

    1.  Struts2的标签库 1.1 Struts2标签库概述 Struts2的标签库可以分为以下3类:用户界面标签.非用户界面标签.AJAX标签; 2.1.1 Struts2标签库的分类和使用 1 ...

  9. Struts2之Struts2的标签库

    前言: Struts2提供了大量的标签 ,用来帮助开发表现层页面,这些表现一方面解决了美观性的需求,因为它们具有html标签一样的外观,另一方面它们解决了功能性的需求, 因为它们具有jsp脚本一样的逻 ...

  10. struts2:标签库图示,控制标签

    目录 一.struts2标签库图示二.控制标签1. 条件判断标签(if/elseif/else)2. 迭代标签(iterator) 2.1 遍历List 2.2 遍历Map 2.3 遍历List(Ac ...

随机推荐

  1. ubuntu linux 中安装 mysql

    三种安装方式: 1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/sourc ...

  2. Surface Dial 与 Windows Wheel UWP应用开发

    随着微软发布 Surface Studio 在演示视频中非常抢眼的一个配件就是 Surface Dial,Dial 是Windows输入设备大家庭中的新成员我们把它归类为Windows Wheel 类 ...

  3. 【.Net Framework 体积大?】不安装.net framework 也能运行!?开篇叙述-1

    [声明:请尊重作者micro-chen的原创,抓文章,请添加来源和作者署名.作者保留追责权利.......] 写在前言 看着日渐没落的.net ,心里多少有了点悲凉.国内的越来越多的新兴公司 都是JA ...

  4. WKWebView的使用与JS交互详细解读

    前言: WKWebView 这是在iOS8.0之后增加的一个比UIWebView更加完善和强大的控件!看网上关于它的博客也是有许多的了,从各个方面总结一下这个WKWebView看网上说它主要是为了和J ...

  5. 设置/修改wampserverd默认项目地址

    打开WampServer安装目录下bin\apache\Apache2.4.4\conf\文件夹打开httpd.conf 首先我们安装完wampserver后一般默认的项目存放地址如下: " ...

  6. SharePoint 2016 配置应用程序商店

    最近碰到一个新的需求,就是要给SharePoint配置应用程序商店,挺有意思的,就简单的配置和记录了一下,分享给大家. 其实应用程序商店之前感觉很鸡肋,但是用起来还是不错的.不喜勿喷,呵呵. 首先需要 ...

  7. Javascript 闭包与高阶函数 ( 二 )

    在上一篇 Javascript 闭包与高阶函数 ( 一 )中介绍了两个闭包的作用. 两位大佬留言指点,下来我会再研究闭包的实现原理和Javascript 函数式编程 . 今天接到头条 HR 的邮件,真 ...

  8. win8命令行

    Win8运行命令.快捷键大全合集 目前看来,Win8还不错,好的产品就是能在短时间改变你使用习惯的产品,首先来给大家讲下windows8 运行命令在哪?其实你可以用Win+R或者你用 WIN+Q再在A ...

  9. 2017年2月22日-----------乱码新手自学.net 之Entity Framework 增删改

    由于我是自学的,没有人教,在网上查资料也查不到个所以然.问大神们也是爱理不理的. 所以这篇随笔纯粹源自于我自己的认识.是否真正正确我也没有把握. 如果有什么错误,请大神们给予指正 ========== ...

  10. 解析令人费解的java泛型

    对于我们java中的泛型,可能很多人知道怎么使用并且使用的还不错,但是我认为想要恰到好处的使用泛型,还是需要深入的了解一下它的各种概念和内部原理.本文将尽可能的囊括java泛型中的重要的概念.主要内容 ...