struts2标签库----数据标签详解

     上篇文章我们介绍struts2标签库中的控制标签的基本使用和部分原理,本篇文章接着了解下标签库中有关数据标签的使用和原理。主要涉及以下数据标签:

  • action标签:用于在视图页面跳转到一个Action
  • bean标签:用于创建一个Javabean实例,按需保存到context中
  • date标签:用于格式化输出一个日期
  • debug标签:用于调试查看ognl上下文中内容
  • include标签:用于包含其他的jsp或者servlet页面资源
  • param标签:主要配合别的标签作为子标签使用
  • push标签:用于将某个值放入到root栈顶
  • set标签:设置一个新变量,放入指定范围
  • url标签:用于生成一个URL地址

数据标签主要是用于提供各种数据访问相关的功能,生成输出国际化信息等。上述所列举的主要是一些常用的,给我们提供较大方便的标签,具体的每个标签的使用和简单的原理会在下文介绍。

一、action标签
     该标签用于向指定的action发出请求,拉取该action对应的视图页面资源。它主要有以下几个属性:

  • var:该属性指定放入当前action到context中的名称,如果没有指定该属性则不会保存该action到context中
  • name:该属性指定了需要调用的action的名称
  • namespace:该属性指定该action的命名空间
  • executeResult:该属性指定了该action最后的视图页面是否要被包含到本页面
  • ignoreContextParams:它指定了本页面的请求参数是否要转发到该action页面

下面通过几个示例了解下具体的使用情况:

//定义一个将要被转向的action
public class MyAction implements Action {
    public String execute() throws Exception{
        return ERROR;
    }
}
  <body>
    <h1>this is the index page</h1>
    <s:action name="my" executeResult="true"/>
    <br/>

    <s:debug/>
  </body>

上面的action标签向名称为my的action转发请求并指定需要将该action加载的视图资源返回,运行截图如下:

这里写图片描述

下面我们修改MyAction:

public class MyAction implements Action {

    private String username;

    public void setUsername(String name){
        this.username = name;
    }
    public String getUsername(){
        return this.username;
    }

    public String execute() throws Exception{
        ActionContext.getContext().put("hello",username);
        return ERROR;
    }
}
  <body>
    <h1>this is the index page</h1>

    <s:action name="my" executeResult="true" ignoreContextParams="false"/>
    <br/>
    <s:debug/>
  </body>

如上述代码所示,我们在myAction中定义了一个username属性,然后直接将它put到context中,最后在error页面获取该值并打印。结果如下:

这里写图片描述

首先我们是在login.jsp页面(该页面未给出,只有简单的一个文本框)提交了一个请求参数到我们的index页面,在index页面中,我们使用action标签转发请求,其中指定该action标签中ignoreContextParams为false表示在被请求的action中会传入当前index页面的请求参数。最后我们在MyAction中自动获取到了该参数然后交给error页面输出。该例主要演示ignoreContextParams属性可以控制是否转发请求参数的作用。

二、bean标签
     bean标签主要用来创建一个Javabean的实例,其中又可以使用param标签为该Javabean实例传递属性值。该标签主要有以下两个属性:

  • name:该属性指定了将要被创建实例的Javabean的类名
  • var:指定了该属性将会把该实例保存到context中和pageScope中

我们看一个例子:

//定义一个Javabean
public class Walker {
    private String username;
    private int age;

    public void  setUsername(String name){
        this.username =name;
    }
    public String getUsername(){
        return this.username;
    }
    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return this.age;
    }
}
<body>
    <h1>this is the index page</h1>
    <s:bean name="MyPackage.Walker" var="walker">
      <s:param name="username" value="'walker'"/>
      <s:param name="age" value="22"/>
    </s:bean>

    <s:property value="#walker.username"/>
    <br/>
    <s:property value="#walker.age"/>
    <s:debug/>
  </body>

输出结果如下:

这里写图片描述

上述代码实例化了一个Javabean实例,并将它保存到context中,接着我们输出该内容,需要注意的是param元素中value属性依然是ognl表达式,想要赋值字符串需要单引号。

三、date标签
     date标签用于格式化输出一个日期,或者输出当前时刻与指定时间之间的时间差。该标签主要有以下几个属性:

  • format:该属性的值为一个格式字符串,它用于为指定日期提供输出格式
  • nice:该属性用于指定是否需要输出当前时刻与指定时刻之间的时间差
  • name:该属性接受的是一个具体的时间
  • var:指定了该属性会将该日期保存到context和pageScope中

需要注意的是,该标签要么输出的是指定了格式的日期,要么输出的是具体的时间差。也就是如果指定nice属性为true,则不应该指定format属性,因为nice属性已经指定了该标签将输出一个时间差格式,如果强行指定format属性,该属性的值将会无效。下面我们看几个例子:

    <body>
    <h1>this is the index page</h1>

    <s:bean name="java.util.Date" var="date"/><br/>
    <s:date name="#date"/><br/>
    <s:date name="#date" format="dd/MM/yyyy"/><br/>

    <%
      Date date = new Date(123123);
      request.setAttribute("date",date);
    %>
    <s:date name="#request.date" nice="true"/>

    <br/>
    <s:debug/>
  </body>

运行结果如下:

这里写图片描述

第一种情况,如果既没有指定format属性,也没有指定nice值,那么会使用默认的format格式输出。第二种情况按照指定的格式输出。第三种情况输出为指定时间距离当前时间的时间差。

四、debug标签
     该标签主要用于调试,查看ValueStack中的各个参数的实际值的情况。

五、include标签
     include标签主要用于将一个jsp页面或者servlet页面包含到本页面来。该标签只有一个属性value,该属性指定了需要包含的资源位置。我们看几个例子:

  <body>
    <h1>this is the index page</h1>

    <s:include value="error.jsp"/>

    <br/>
    <s:debug/>
  </body>

结果如下:

这里写图片描述

我们查看源码:

这里写图片描述

该标签很是类似于jsp的编译指令include。当然我们也可以通过param标签传入参数到被包含的页面中。例如:

    <s:include value="error.jsp">
      <s:param name="a" value="'walker'"/>
      <s:param name="b" value="'yam'"/>
      <s:param name="c" value="'cyy'"/>
    </s:include>
这里写图片描述

六、push标签
     push用于将某个值放到root栈顶,其中有个属性value表示即将被放入栈顶的元素。下面看个例子:

  <body>
    <h1>this is the index page</h1>

    <s:bean name="MyPackage.Walker" var="w">
      <s:param name="username" value="'walker'"/>
      <s:param name="age" value="23"/>
    </s:bean>

    <s:push value="#w">
      <s:property value="username"/><br/>
      <s:property value="age"/>
    </s:push>
    <p>离开push标签之后</p>
    <s:property value="username"/>
    <br/>
    <s:debug/>
  </body>

首先我们实例化一个walker类实例并保存到context中,接着我们在push标签中直接访问栈顶元素获取该实例的属性值。但是我们离开push标签之后就不能获取该实例的属性值了,因为push标签结束之后会将刚刚放入root栈中的元素移除。也就是说我们如果想要把一个元素送入root栈来方便访问,那么就必须在push标签内部完成访问操作。下面是上述代码的结果截图:

这里写图片描述

七、set标签
     set标签用于将某个值放入到指定的范围内,可以理解为定义一个新变量并将它放入到指定范围内。该标签主要有以下几个属性:

  • scope:指定该变量将会被存放到的范围,可以是application,session,request,page,action这5个值。
  • name:该属性指定了该元素保存的指定范围内的key值
  • value:该属性指定了将要被存放的实例的值
  • var:该属性指定了将要存放到context中的元素名称

下面通过几个实例了解下基本的使用情况:

  <body>
    <h1>this is the index page</h1>

    <s:bean name="MyPackage.Walker" var="w">
      <s:param name="username" value="'walker'"/>
      <s:param name="age" value="23"/>
    </s:bean>

    <s:set value="#w" name="a" scope="request"/>
    <s:property value="#request.a.username"/>
    <br/>
    <s:debug/>
  </body>

首先我们实例化了一个walker对象,然后我们将该实例保存到request范围内,最后通过property标签取出该数据内容。运行截图如下:

这里写图片描述

上述代码演示的是通过set标签将元素保存到request范围内,至于其他范围内的数据保存情况类似,此处不再赘述。需要注意一点的是:如果指定将元素保存到action范围的话,那么该元素不仅会被保存到request中,还会保存到context中。

八、url标签
     url标签用于生成一个URL地址,该标签主要有以下几个属性值:

  • action:指定生成的URL地址为某个action
  • anchor:指定了URL的锚点
  • encode:指定了是否需要对参数进行编码
  • includeContext:指定是否需要将当前上下文包含到该URL中
  • includeParams:该属性用于指定是否包含请求参数在URL中,该属性的值有以下几个,none,all,get。
  • method:该属性指定了调用目的action的某个方法
  • namespace:指定了action的命名空间
  • portletMode:指定结果页面的portlet模式
  • scheme:用于设置scheme属性
  • value:用于指定生成的URL的值,和action是差不多的,只是action指定的是action的URL
  • var:指定该属性会将该URL保存到context中
  • windowState:指定结果页面的portlet窗口状态

上面简单介绍各个属性的作用,单总结的很是粗暴。下面通过具体的实例来深刻理解下它们各自的作用。

  <body>
    <h1>this is the index page</h1>
    <s:url value="my" var="u" escapeAmp="false">
      <s:param name="id" value="01"/>
      <s:param name="age" value="22"/>
    </s:url>
    <s:property value="#u"/>
    <br/>
    <s:debug/>
  </body>
生成URL:my?id=1&age=22 

如上所示,我们指定escapeAmp为false表示用于连接多个参数的&符号不会被编码,我们通过param子标签传入参数作为URL的参数,最后生成完整URL。至于一些其他的属性值,只有在具体项目使用中才能有更加深刻的体会,此处没有比较好的例子,就不赘述了。

有关于struts2标签库的数据标签已经简单介绍完了,由于没有结合具体的项目,所以介绍的很浅显,不当之处,望指出!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,204评论 0 17
  • 前面几篇文章我们介绍了有关struts2的基本内容,简单理解了整个框架的运作流程。从本篇开始我们逐渐了解和使用st...
    Single_YAM阅读 780评论 0 5
  • HTML标签解释大全 一、HTML标记 标签:!DOCTYPE 说明:指定了 HTML 文档遵循的文档类型定义(D...
    米塔塔阅读 3,173评论 1 41
  • 七十而从心所欲不逾矩。 ——《论语·为政》 我要先讲讲我和茶的缘分。 最开始,我认为喝功夫茶是一种装逼的行为。当时...
    甄三十七阅读 511评论 2 1