博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2之标签使用
阅读量:6991 次
发布时间:2019-06-27

本文共 4909 字,大约阅读时间需要 16 分钟。

  上一篇我们一起探讨了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
{ private User user = new User(); @Override public String execute() throws Exception { return SUCCESS; } public User getModel() { return user; }}

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

  1. s:property:
  2. s:property 取值为字符串:
  3. s:property 设定默认字符串:
  4. s:property 设定HTML:
  5. s:property 设定HTML:

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

  

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


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

  1. set 设定adminName值(默认为request和ActionContext)
  2. set 从request取值:
  3. set 从ActionContext取值:
  4. set 设定范围(2.1中name已经删除)
  5. set 从相应范围取值:<%=pageContext.getAttribute("pagePassword") %>
  6. set 设定范围(2.1之后的版本都是采用var)
  7. set 从相应范围取值:由于设置数据范围是session所以Property没办法得到值
  8. set 从相应范围取值:

  页面显示结果:

  

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


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

  1. bean 定义bean,并使用parama来设定新的属性值:
  2. bean 定义bean,并使用parama来设定新的属性值:
    bean中查看debug:

  <s:debug>在bean里面:

  

  <s:debug>在bean外面:

  

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


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

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

  页面显示结果:

  

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


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

  1. if elseif else: age=
    此种写法不建议使用
  2. if elseif else: age=
  3. actionMessages:
  4. 不加[0]:
    to young!
    great
    old
  5. 加[0]:
    to young!
    great
    old
  6. parameters.age == null:
    true
    false
    parameters.aaa == null:
    true

  页面显示结果:

  

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


  使用iterator遍历一个值。一个可迭代的值可以是.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 名字用于将引用的值推入值栈

  我们的页面处理部分:

  1. iterator遍历:
    | 遍历过的元素总数:
    | 遍历过的元素索引:
    | 当前是偶数:
    | 当前是奇数:
    | 是第一个元素吗:
    | 是最后一个元素吗:

  页面结果:

  

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


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

  1. |
  2. |

  页面结果:

  


   最后简单看一下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页面处理:

  • |
  • |
  •   页面处理结果:

      


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

    转载地址:http://labvl.baihongyu.com/

    你可能感兴趣的文章
    处理:“ORA-28002: the password will expire within 7 days”的问题
    查看>>
    How to: Fix a network printer suddenly showing as offline in Windows Vista, 7 or 8 « Robin's Blog
    查看>>
    读书笔记—CLR via C#章节4-7
    查看>>
    Python的__init__, __new__魔法方法以及在__metaclass__元类中的使用
    查看>>
    nodejs 搞定 阿里云短信API 后面有适用于小白的解决方案
    查看>>
    7.11 批量创建房间
    查看>>
    android camera
    查看>>
    bzoj 2259 [Oibh]新型计算机 ——最短路(建图)
    查看>>
    洛谷2575高手过招
    查看>>
    自己动手实现线性映射,哈希映射
    查看>>
    依然莫名其妙的内容查询Web部件(Content Query Web Part)
    查看>>
    删除专家账号,要注意删干净
    查看>>
    抗投诉空间
    查看>>
    python代码 构建验证码
    查看>>
    Linux动态库和静态库
    查看>>
    js基础--高阶函数(map,reduce,filter,sort)
    查看>>
    结合数据结构来看看Java的String类
    查看>>
    全排列——DFS实现
    查看>>
    go 语言与循环
    查看>>
    iOS版 hello,world版本2
    查看>>