zoukankan      html  css  js  c++  java
  • Struts(十三):通用标签

    • Struts标签简介:

    Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性,实现了更好的代码复用。
    Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。
    Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用。
    包括最常用的jsp页面,也可以说Velocity和FreeMarker等模板技术中的使用。

    •  Struts标签分类:

       1.用户界面标签(UI标签):主要用来生成HTML元素的标签。

    (1)表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。

    (2)非表单标签:主要用于生成页面上的tree,Tab页等。

       2.非用户界面标签(非UI标签):主要用于数据访问,逻辑控制。

    (1)数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。

    (2)流程控制标签:主要包含用于实现分支,循环等流程控制的标签。

       3.AJAX标签:用于支持Ajax效果

    • 使用前准备:

     使用时需要在jsp页面中引入标签:

    <%@ taglib prefix="s" uri="/struts-tags"%>

    需要在web.xml中添加使用struts的配置信息。

    • 标签的使用:

    1、<s:property/>标签:用来输出一个值栈属性值

    名字 类型 默认值 说明
    default String   可选,若value值为null或者没有给定,将显示该属性值
    escape boolean true 可选,是否要对html特殊字符进行转义
    value String <来自栈顶对象> 将要显示的值

     index.jsp:

    <a href="strutstags.action?name=hello name">send parameter link</a>

    comon-tags.jsp

        s:property:打印对象栈中的属性值<br>
        <s:property value="tagName"></s:property><br>
        map栈:对于map栈,打印request,session,application的某个属性值或者某个请求参数的值。<br>
        <s:property value="#session.date"></s:property><br>
        <s:property value="#parameters.name[0]"></s:property><br>

    struts.xml

    <action name="strutstags" class="com.dx.struts2.StrutsTags" method="test">
        <result name="test">/comon-tags.jsp</result>
    </action>

    SturtsTags.java action类:

    /**
     * @author Administrator
     *
     */
    package com.dx.struts2;
    
    import java.util.Date;
    import java.util.Map;
    
    import org.apache.struts2.interceptor.SessionAware;
    
    public class StrutsTags implements SessionAware{
        private String tagName;
        
        public String getTagName() {
            return tagName;
        }
    
        public void setTagName(String tagName) {
            this.tagName = tagName;
        }
    
        public String test(){
            this.tagName="Hello Struts-tags";
            this.session.put("date", new Date());
            
            return "test";
        }
    
        private Map<String,Object> session;
        @Override
        public void setSession(Map<String, Object> session) {
            // TODO Auto-generated method stub
            this.session=session;
        }
    }

    输出结果:

    s:property:打印对象栈中的属性值
    Hello Struts-tags
    map栈:对于map栈,打印request,session,application的某个属性值或者某个请求参数的值。
    17-3-20
    hello name

    2、url标签用来动态地创建一个URL

    名字 类型 默认值 说明
    action String   可选,指定生成的url为哪个action
    anchor String   可选,指定被创建的url的链接锚点
    encode Boolean true 可选,是否对参数进行编码
    escapeAmp Boolean true 可选,是否要对“&”字符进行转义
    includeContext Boolean true 可选,是否要把当前的上下文包括进来
    includeParams String get 可选,指定是否包含请求参数,可以取3个值之一:one/get/all
    method String   可选,指定action的方法,当用action属性来生成url是,如果指定该属性,url将链接到指定的action的方法上。
    namespace String   可选,指定url的命名空间
    portletMode String   可选,指定结果页面的portlet模式
    protletUrlType String   可选,指定将被创建的URL是一个protlet例程,还是action URL
    schema String   可选,指定使用什么协议:http,https
    value String   可选,指定将生成的url值(如果新建URL的不是一个action的话)
    var String   可选,指定用来被压入ContextMap中的键值
    windowState String   可选,当用在一个portlet环境时,用来指定portlet的窗口状态

     comon-tags.jsp

    s:url 创建一个url地址<br>
        <s:url value="/helloValue" var="url1">
            <!-- 对于Value值会自动动态赋值 -->
            <s:param name="tagInteger" value="111"/>
        </s:url>
        ${url1}<br>
        <s:url value="/helloValue" var="url2">
            <!-- 对于Value值会自动的进行OGNL解析 -->
            <s:param name="tagInteger" value="tagInteger"/>
        </s:url>
        ${url2}<br>
        <s:url value="/helloValue" var="url3">
            <!-- 对于Value值会自动的进行OGNL解析,若不希望进行解析,则需要使用单引号引着 -->
            <s:param name="tagInteger" value="'abc'"/>
        </s:url>
        ${url3}<br>
        <s:url action="helloAction" namespace="/hellonamespace" method="save" var="url4">
            <s:param name="tagInteger" value="'abcde'"/>
        </s:url>
        ${url4}<br>
        <s:url value="/testUrl" var="url5" includeParams="get">
        </s:url>
        ${url5}<br>
        <!-- post方式提交的参数 -->    
        <s:url value="/testUrl" var="url6" includeParams="all">
        </s:url>
        ${url6}<br>

    备注:上边的s:param 中也支持ognl写法比如:

    <s:url value="/testUrl" var="url7">
          <s:param name="date" value="#session.date"></s:param>
    </s:url>
    <br>

    index.jsp

    <s:form action="strutstags.action" method="post">
            product name: 
            <input name="productName" />
            <br />
            product description: 
            <input name="productDesc" />
            <br />
            product price: 
            <input name="productPrice" />
            <br />
            <s:submit value="提交"></s:submit>
        </s:form>
        <br>
        <a href="strutstags.action?name=hello name">send parameter link</a>

    ComonTags.java

    /**
     * @author Administrator
     *
     */
    package com.dx.struts2;
    
    import java.util.Date;
    import java.util.Map;
    
    import org.apache.struts2.interceptor.SessionAware;
    
    public class StrutsTags implements SessionAware{
        private Integer tagInteger;
        private String tagName;
        
        public String getTagName() {
            return tagName;
        }
    
        public void setTagName(String tagName) {
            this.tagName = tagName;
        }
        
        public Integer getTagInteger() {
            return tagInteger;
        }
    
        public void setTagInteger(Integer tagInteger) {
            this.tagInteger = tagInteger;
        }
    
    
        public String test(){
            this.tagName="Hello Struts-tags";
            this.tagInteger=8888;
            this.session.put("date", new Date());
            
            return "test";
        }
    
        private Map<String,Object> session;
        @Override
        public void setSession(Map<String, Object> session) {
            // TODO Auto-generated method stub
            this.session=session;
        }
    }
    View Code

    当通过点击index.jsp中的"send parameter link"时,comon-tags.jsp显示效果:

    s:url 创建一个url地址
    /Struts_01/helloValue?tagInteger=111
    /Struts_01/helloValue?tagInteger=8888
    /Struts_01/helloValue?tagInteger=abc
    /Struts_01/hellonamespace/helloAction!save.action?tagInteger=abcde
    /Struts_01/testUrl?name=hello+name
    /Struts_01/testUrl?name=hello+name

    当通过点击index.jsp的"提交"按钮时,comon-tags.jsp显示效果:

     s:url 创建一个url地址
    /Struts_01/helloValue?tagInteger=111
    /Struts_01/helloValue?tagInteger=8888
    /Struts_01/helloValue?tagInteger=abc
    /Struts_01/hellonamespace/helloAction!save.action?tagInteger=abcde
    /Struts_01/testUrl
    /Struts_01/testUrl?productName=1&productDesc=2&productPrice=3

    3、set 标签 用来在以下Map对象里创建一个键值对:

    ------ValueStack值栈的ContextMap值栈

    ------Map类型的session对象

    ------Map类型application对象

    ------Map类型的request对象

    ------Map类型的page对象

    名字 类型 默认值 说明
    name String   将被创建的属性的键
    value String   该键新引用的对象
    scope String default 目标变量的作用范围,可取值是application/session/request/page和default

    页面

        <!-- 会对value值自动的进行OGNL解析 -->
        <s:set name="mySet1" value="tagInteger" scope="request"></s:set><br>
        ${mySet1}<br>
        ${requestScope.mySet1 }<br>
            

    输出结果:

    8888
    8888

    4、push标签

    push标签的功能和set标签类似;

    push标签将把一个对象压入ValueStack,而不是压入ContextMap;

    push标签在标签起始是把一个对象压入栈,标签结束时将对象弹出栈。

    名字 类型 默认值 说明
    Value String   将压入ValueStack栈的值

     页面:

        s:push<br>
        <s:push value="#request.people">
            name:${name}-age:${age }
        </s:push><br>
        name:${name}-age:${age }<br>    

    ComonTags.java action

    /**
     * @author Administrator
     *
     */
    package com.dx.struts2;
    
    import java.util.Date;
    import java.util.Map;
    
    import org.apache.struts2.interceptor.RequestAware;
    import org.apache.struts2.interceptor.SessionAware;
    
    public class StrutsTags implements SessionAware , RequestAware{
        private Integer tagInteger;
        private String tagName;
        
        public String getTagName() {
            return tagName;
        }
    
        public void setTagName(String tagName) {
            this.tagName = tagName;
        }
        
        public Integer getTagInteger() {
            return tagInteger;
        }
    
        public void setTagInteger(Integer tagInteger) {
            this.tagInteger = tagInteger;
        }
    
    
        public String test(){
            this.tagName="Hello Struts-tags";
            this.tagInteger=8888;
            this.session.put("date", new Date());
            
            People people=new People();
            people.setName("people1");
            people.setAge(10);
            
            this.request.put("people", people);
            
            return "test";
        }
    
        private Map<String,Object> session;
        @Override
        public void setSession(Map<String, Object> session) {
            this.session=session;
        }
    
        private Map<String,Object> request;
        @Override
        public void setRequest(Map<String, Object> request) {
            this.request= request;    
        }
    }
    View Code

    Peopel.java

    package com.dx.struts2;
    
    public class People {
        private String name;
        private Integer age;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
    }
    View Code

    输出结果:

    s:push
    name:people1-age:10 
    name:-age:

    5、if,else 和elseif标签

     test属性必须

    s:if s:elseif s:else<br>
        ${requestScope.people.age }<br>
        <s:if test="#request.people.age>80">>80</s:if>
        <s:elseif test="#request.people.age>30">>30</s:elseif>
        <s:elseif test="#request.people.age>8">>8</s:elseif>
        <s:else><=8</s:else>
        <br>
        <s:if test="#request.people.age>10">>10</s:if>
        <s:else><=10</s:else>
        <br>

    测试结果:

    s:if s:elseif s:else
    10
    >8 
    <=10 

    6、iterator标签

     iterator标签用来遍历一个数组,Collection或一个Map,并把这个可遍历对象里的一个元素依次压入和弹出ValueStack栈

    名字 类型 默认值 说明
    value String   将被遍历是可以遍历对象
    status org.apache.struts2.views.jsp.IteratorStatus    
    var String   用来引用这个可遍历对象中的当前元素的变量

    在开始执行时,iterator标签会先把IteratorStatus类的一个实例压入ContextMap,并把每次循环遍历时更新它,可以将一个指向IteratorStatus对象的变量赋值给status.

     StrutsTags.java的test方法添加代码:

            List<People> peoples=new ArrayList<People>();
            
            peoples.add(new People("AAA",111));
            peoples.add(new People("BBB",222));
            peoples.add(new People("CCC",333));
            peoples.add(new People("DDD",444));
            peoples.add(new People("EEE",555));
            
            this.request.put("peoples", peoples);        

    修改People.java添加构造函数:

    package com.dx.struts2;
    
    public class People {
        private String name;
        private Integer age;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        
        public People(){}
        
        public People(String name,Integer age){
            this.name=name;
            this.age=age;
        }
    }
    View Code

    comon-tags.jsp

        
        s:iterator<br>
        <s:iterator value="#request.peoples" status="status">
        index:${status.index }-count:${status.count }:${name }-${age }<br>
        </s:iterator><br>

    输出结果:

    s:iterator
    index:0-count:1:AAA-111
    index:1-count:2:BBB-222
    index:2-count:3:CCC-333
    index:3-count:4:DDD-444
    index:4-count:5:EEE-555

     6、sort标签:用来对一个可遍历的对象里的元素进行排序

    名称 类型 默认值 说明
    comparator java.util.Comparator   在排序过程中使用的比较器
    source String   将对之进行排序的可遍历对象
    var String   用来应用因排序而新生成的可遍历对象的变量

    添加PeopleComparator.java

    package com.dx.struts2;
    
    import java.util.Comparator;
    
    public class PeopleComparator implements Comparator<People>{
    
        @Override
        public int compare(People o1, People o2) {
            return o1.getName().compareTo(o2.getName());
        }
    
    }
    View Code

    修改ComonTags.java:

    /**
     * @author Administrator
     *
     */
    package com.dx.struts2;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.struts2.interceptor.RequestAware;
    import org.apache.struts2.interceptor.SessionAware;
    
    public class StrutsTags implements SessionAware, RequestAware {
        private Integer tagInteger;
        private String tagName;
        private PeopleComparator peopleComparator;
    
        public String getTagName() {
            return tagName;
        }
    
        public void setTagName(String tagName) {
            this.tagName = tagName;
        }
    
        public Integer getTagInteger() {
            return tagInteger;
        }
    
        public void setTagInteger(Integer tagInteger) {
            this.tagInteger = tagInteger;
        }
    
        public PeopleComparator getPeopleComparator() {
            return peopleComparator;
        }
    
        public void setPeopleComparator(PeopleComparator peopleComparator) {
            this.peopleComparator = peopleComparator;
        }
    
        public String test() {
            this.tagName = "Hello Struts-tags";
            this.tagInteger = 8888;
            this.peopleComparator=new PeopleComparator();
                    
            this.session.put("date", new Date());
    
            People people = new People();
            people.setName("people1");
            people.setAge(10);
    
            this.request.put("people", people);
    
            List<People> peoples = new ArrayList<People>();
    
            peoples.add(new People("AAA", 111));
            peoples.add(new People("DDD", 444));
            peoples.add(new People("CCC", 333));
            peoples.add(new People("EEE", 555));
            peoples.add(new People("BBB", 222));
    
            this.request.put("peoples", peoples);
    
            return "test";
        }
    
        private Map<String, Object> session;
    
        @Override
        public void setSession(Map<String, Object> session) {
            this.session = session;
        }
    
        private Map<String, Object> request;
    
        @Override
        public void setRequest(Map<String, Object> request) {
            this.request = request;
        }
    }
    View Code

    修改comon-tags.jsp:

        s:sort<br>
        <s:sort comparator="peopleComparator" source="#request.peoples" var="peoples2">
        </s:sort>
        <s:iterator value="#attr.peoples2">
        ${name }-${age }<br>
        </s:iterator>

    测试结果:

    s:sort
    AAA-111
    BBB-222
    CCC-333
    DDD-444
    EEE-555

    7、date标签

    名字 类型 默认值 说明
    format String   可选,日期的格式
    name String   将被排版的日期值
    nice Boolean false 可选,指定是否输出日期和当前日期之间的时间差
    var String   可选,用来引用被压入ValueStack栈的日期值的变量

    format属性值必须是java.util.SimpleDateFormat类里定义的日期、时间格式之一。

    修改页面:

        s:date<br>
        <s:date name="#session.date" format="yyyy-MM-dd HH:mm:ss" var="date23"></s:date>
        ${date23 }

    输出结果:

    s:date
    2017-03-20 21:53:19

    8、a标签

    a标签将呈现为一个html链接,这个标签可以接受HTML语言中的a元素所能接受的所有属性。

    修改页面代码:

        a:标签<br>
        <s:iterator value="#request.peoples">
        <s:a href="/myTest.action?name=%{name}">${age }</s:a><br>
        </s:iterator>

    生成结果:

    a:标签
    111
    444
    333
    555
    222

  • 相关阅读:
    Flink实例(117):FLINK-SQL应用场景(16)以upsert的方式读写Kafka数据——以Flink1.12为例(二)
    Flink实例(116):FLINK-SQL应用场景(15)以upsert的方式读写Kafka数据——以Flink1.12为例(一)
    数据挖掘实践(17):基础理论(十七)数据挖掘基础(四)模型解释
    数据挖掘实践(16):基础理论(十六)数据挖掘基础(三)特征工程(二)性能度量与评估方法
    rust 可变变量
    Rust学习(32):智能指针-Rc<T>
    rust 高级编程
    rust 所有权
    rust智能指针
    Anbox:容器中的 Android,anboxandroid
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/6582902.html
Copyright © 2011-2022 走看看