Struts2标签

1、用来输出值。
<s:property value="key" escape="true" default=""/>

value的值是OGNL表达式。如果没有设置value属性,则输出值栈栈顶对象default属性用于设置默认值,即未找到属性值时显示的值。

2、用来将某个变量及其值放入ActionContext中
<s:set var=“age" value="5" scope=“action”></s:set>

scope可取值有request,session,application,action,若未设置scope则放入ActionContext。
获取时要使用#。

<s:property value="#age" />

也可直接创建一个集合对象(List或Map),如下代码:

<s:set var="list" value="{'zhangsan','李四','王麻子'}" />

生成Map:

<s:set var="map" value="#{'z':'张三', 'l':'李四'}"/>
3、条件判断标签
<s:if><s:else>标签
<s:if test="age<20">
<s:if test="list.size()<2">
<s:if test="list==null || list.size()==0">
  null
</s:if>
<s:else>
  not null
</s:else>

注:test属性值中可使用and、or,也可使用&&、||。

4、<s:url>标签,用于辅助生成url字符串
<s:url var="linkName" action="productdAction" method="view">
  <s:param name="prdId">2</s:param>
</s:url>
<s:a href="%{#linkName}">查看产品</s:a>
注:%{ }的使用,在表达式可能被看做字符串的情况下,使用%{}符号表明该字符串是OGNL表达式,%{ }只有在Struts标签中才生效。也可改用下述代码:
<a href='<s:property value="#linkName"/>'>test</a>
5、<s:iterator/>标签用来迭代输出集合。

该标签有3个属性:

value:指定被迭代的集合
var :指定引用当前元素变量名
status属性:指定引用IteratorStatus实例的变量名。
IteratorStatus实例中存在以下几个方法:
int getCount() 返回迭代计数
int getIndex() 返回当前元素索引
boolean isEven() 当前元素count是否偶数
boolean isFirst() 是否第一个元素
boolean isLast() 是否最后一个元素
boolean isOdd() 当前元素count是否奇数

【示例】

<s:iterator value="#list" var='v' status="st">
<s:if test="#st.even">
  <s:property value="#st.count" />
</s:if>
当前元素值:<s:property value="#v" /> <br />
</s:iterator>
6、<s:date name=format=/>标签用来格式化日期对象为字符串name指定待格式化的日期指;format指定格式。

例如:

<s:date name="" format="yyyy-MM-dd HH:mm:ss" var="v" />
上面的所有示例
<!-- 引用字符串常量 必须加引号 -->
        <s:property value="'my name is xixi'"/> <br/>
        <!-- 将数字常量显示到jsp页面 -->
        <s:property value="360" /> <br/>
        
        <!-- 调用值栈中的Map对象 属性 -->
        <s:property value="user.testString"/> <br/>
        <!-- 调用值栈中的Map对象 方法 -->
        <s:property value="user.getTestString()"/> <br/>
        <!-- 调用类的静态方法 -->
        <s:property value="@@floor(39.44)"/> <br/>
        <!-- 不用将特殊的字符转为字符串的形式 -->
        
        <s:property value="someValue" escape="false" /> <br/>
        <!-- 按照原来的形式进行输出 ,将特殊殊的字符进行转换,转化为字符串-->
        <s:property value="someValue" /> <br/>
        
        <!-- 设置一个linkName的URL路径 -->
        <s:url var="linkName" action="DefaultAction" method="view">
            <s:param name="prdId">2</s:param>
        </s:url>
        <!-- struts 会将我的#linkName当做一个锚点,将#linkName的URL追加到当前的URL -->
        <!-- http://localhost:8088/struts_demo/test.action#linkName--> 
        <a href="#linkName">linkName1</a><br/>
        <!-- 生成正确的超链接地址  -->
         <!-- http://localhost:8088/struts_demo/%%7B#linkName}--> 
        <a href='<s:property value="#linkName"/>'>linkName2</a><br/>
        <!-- 在生成的url的变量前加上了%{}, 明确的告诉struts框架,我当前变量的值按照ognl表达式去解析,而不是锚点 -->
        <!-- %{} 只在你期望将一个可能会被解析字符串url时,加上这才起作用,否则,无任何作用 -->
        <!-- http://localhost:8088/struts_demo/DefaultAction!view.action?prdId=2 -->
        <s:a href="%{#linkName}">linkName3</s:a><br/>
        <!-- 在普通的a标签中使用%{}没有作用-->
        <!-- http://localhost:8088/struts_demo/%%7B#linkName}--> 
        <a href="%{#linkName}">linkName4</a>
        
        <!-- 定义一个列表 -->
        <s:set var="myList" value="{'zzzz','sssss','ddddd','rrrrr','hhhhh'}"></s:set>
        <ul>
            <s:iterator value="#myList" var="str" status="sts">
                <li><s:property value="#sts.count"/>&nbsp:&nbsp&nbsp<s:property value="#str"/></li>           
            </s:iterator>
        </ul>
        
        <!-- 输出日期的形式 -->
        <!-- 17-12-29  -->
        <s:property value="dob"/>
        <s:date name="dob" format="yyyy/MM/dd HH:mm:ss" var="date"/>
        <!-- 2017/12/29 12:42:38 -->
        <s:property value="date"/>
7、【了解】Struts2 UI标签
<s:form action="login">
  <s:textfield tooltip="name" label="姓名" name="userName" />
  <s:password tooltip="password" label="密码" name="pwd"></s:password>
  <s:textarea tooltip="content" label="备注" name="remark" cols="30"
    rows="3" />
  <s:file tooltip="Attachment" label="附件" name="photo" />
  <s:a href="get.jsp">超链接</s:a>
  <s:submit value="Login"></s:submit>
  <s:reset value="reset"></s:reset>
</s:form>
image.png
各标签可使用的属性:
theme,cssStyle,cssClass,cssErrorClass,cssErrorStyle,name,value,......

使用了theme属性

    <s:a href="get.jsp">超链接</s:a>
    <s:form action="login" theme="simple">
      <s:textfield tooltip="name" label="姓名" name="userName" />
      <s:password tooltip="password" label="密码" name="pwd"></s:password>
      <s:textarea tooltip="content" label="备注" name="remark" cols="30" rows="3" />
      <s:file tooltip="Attachment" label="附件" name="photo" />
      <s:submit value="Login"></s:submit>
      <s:reset value="reset"></s:reset>
     </s:form>
image.png
• UI标签或者Form标签的theme属性用来指定主题。

Struts2内建了3个主题,分别是simple, xhtml, css_xhtml。
simple 主题只会将UI标签转换为普通HTML元素,不会生成其它额外内容;

xhtml主题是Struts2的默认主题,它具有如下特性:
1、 UI控件使用标准的两列表格布局。
2、将label属性转换为<label>元素并和控件关联。
3、如果某控件校验未通过,自动显示校验错误信息。
• 使用Struts UI标签的优点:
1,自动根据Action中对应的实例变量显示表单控件的值。
2,自动显示校验错误消息,无需使用<s:fielderror/>标签。
• 单选按钮组件
<s:radio list="" listKey="key" listValue="value" name=""></s:radio>

list属性指明要迭代的集合;
listKey属性指明使用list中对象的哪个属性作为选项值;
listValue属性指明使用list中对象的哪个属性作为显示内容;
value属性控制哪个项目被选中;

注意:name属性是必须的。
• 下拉列表组件
<s:select list="" headerKey=“-1“ headerValue=”-请选择-" name="" 
      listKey="key" listValue="value"></s:select>

headerKey和headerValue指明第一项的value和内容;
value属性控制当前被选中项。

• 复选框组件
<s:checkboxlist list="" listKey="key” listValue="value" name="">
 </s:checkboxlist>

示例程序:
Action类

package com.xixi.struts_demo.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;
import com.xixi.struts_demo.dto.MajorInfo;

public class DefaultAction extends BaseAction {
    
    private Integer majorId;
    
    private Integer[] majorIds;
    
    private String myName = "兮兮";
    
    public Integer getMajorId() {
        return majorId;
    }

    public void setMajorId(Integer majorId) {
        this.majorId = majorId;
    }

    public Integer[] getMajorIds() {
        return majorIds;
    }

    public void setMajorIds(Integer[] majorIds) {
        this.majorIds = majorIds;
    }
    
    public String getMyName() {
        return myName;
    }

    @Override
    public String execute() throws Exception {
        ValueStack vs = ActionContext.getContext().getValueStack(); 
        vs.set("myName", "周润发");
        vs.set("user",new Object(){
            public String getTestString(){
                return "李四光";
            }
        });
        
        vs.set("someValue", "<div style='color:red;'>你的名字</div>");
        vs.set("dob", new Date());
        
        List<MajorInfo> majorList = getMajorList();
        super.add2ValueStack("majorList", majorList);
        this.majorId = 102;
        this.majorIds = new Integer[]{102,104,108};
        return SUCCESS;
    }

    private List<MajorInfo> getMajorList() {
        List<MajorInfo> list = new ArrayList<MajorInfo>();
        for (int i = 0; i < 10; i++) {
            list.add(new MajorInfo(100+i, "专业"+(100+i)));
        }
        return list;
    }
}

jsp代码

      <form action="" method="post">
            <s:radio list="majorList" listKey="majorId" listValue="majorName" name="majorId"></s:radio><br/>
            
            <s:select list="majorList" listKey="marjorId" listValue="majorName" name="majorId"
                headerKey="0" headerValue="请选择你的专业"></s:select><br/>
                
            <s:checkboxlist list="majorList"  listKey="marjorId" listValue="majorName" name="majorIds"></s:checkboxlist><br/>
            <input type="submit" value="提交"/>
        </form>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 1.Struts标签 Struts2中定义一组新的标签库,使用struts的标签库和JSTL类似。 Struts2...
    MPPC阅读 450评论 0 3
  • 首先我们给出相关配置代码:(工程Struts2_2000_StrutsTags)struts.xml index....
    yjaal阅读 694评论 0 1
  • 前面几篇文章我们介绍了有关struts2的基本内容,简单理解了整个框架的运作流程。从本篇开始我们逐渐了解和使用st...
    Single_YAM阅读 822评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 在这里总结一下Struts2标签: 一:常用的标签 1, if……elseif……else,用来控制选择输出的标签...
    枇杷树8824阅读 554评论 0 2