美文网首页Java 杂谈
Struts2学习笔记 | 通用标签

Struts2学习笔记 | 通用标签

作者: 一颗白菜_ | 来源:发表于2019-08-03 21:50 被阅读3次

    1.Struts2自动把Action对象放入到值栈中

    • 放入的时间点
      在调用Action类中要调用的Action方法之前就将Action对象放入到值栈中。
      但是还没有赋值,赋值操作在Action方法中进行

    • 过程
      先创建一个StrutsActionProxy对象,然后在对StrutsActionProxy对象进行初始化的时候,把Action对象放入到值栈中。


    2.property标签

    • 作用是打印值栈中的属性值
      例如输出栈顶的Action对象的productName的值:<s:property value="productName"/>

    • 对于对象栈,打印值栈中对应的属性值

    • 关于<s:property>的几个属性说明

    名字 类型 默认值 说明
    default String 可选,如果value值为null或没有给定,将显示该属性值
    escape boolean 可选,是否要对HTML特殊字符进行转移
    value String 来自栈顶对象 将要显示的值
    • 对于Map栈,打印requestsessionapplication的某个属性值或者是某个请求参数的值

    • 如果value的值没有给出,则默认输出栈顶对象


    3.url标签

    • 作用是创建一个URL字符串

    • 关于<s:url>的几个常用属性说明

    名字 类型 默认值 说明
    action String 可选,指定生成的url为哪个action
    method String get 可选,指定action的方法,当用action属性来生成url时,如果指定该属性,url将连接到指定的action方法上
    namespace String 可选,指定url的命名空间
    value String 可选,指定将生成的url值(如果新建的url不是一个action的话)
    var String 可选,指定用来被压入ContextMap中的键值
    • 对于value,值会自动的进行OGNL解析。若不希望其值被自动的解析,则可以加上单引号

    Demo

    <%@ page import="struts.valuestack.Person" %>
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="struts.valuestack.PersonComparator" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ taglib prefix="S" uri="/struts-tags" %>
    <%--
      Created by IntelliJ IDEA.
      User: 白菜
      Date: 2019/8/2
      Time: 13:04
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <s:url value="/getProduct" var="url" >
            <!-- struts2自动把1001作为属性值,因为其不可能为属性名-->
            <s:param name="productId" value="1001"></s:param>
        </s:url>
        ${url}<!-- 输出:/struts2_new/getProduct?productId=1001 -->
        <br><br>
        <!-- 希望id是值栈中的productid-->
        <s:url value="/getProduct" var="url2" >
            <!-- 对于value,值会自动的进行OGNL解析-->
            <s:param name="productId" value="productId"></s:param>
            <s:param name="date" value="#session.date"></s:param>
        </s:url>
        ${url2}<!-- 输出:/struts2_new/getProduct?productId=20000&date=Sat+Aug+03+21%3A27%3A41+CST+2019  -->
        <br><br>
        <!-- 希望id是值栈中的productid-->
        <s:url value="/getProduct" var="url3" >
            <!-- 对于value,值会自动的进行OGNL解析,若不希望进行OGNL解析,则使用单引号引起来-->
            <s:param name="productId" value="'aaa'"></s:param>
        </s:url>
        ${url3}<!-- 输出:/struts2_new/getProduct?productId=aaa  -->
        <br><br>
        <!-- 构建一个请求action的地址-->
        <s:url action="testAction" namespace="/helloWorld" method="save" var="url4" >
    
        </s:url>
        ${url4}<!-- 输出:/struts2_new/helloWorld/testAction!save.action  -->
        <br><br>
        <s:url value="testUrl" var="url5" includeParams="get"></s:url>
        <!-- 还可以取为all 则可以解析post请求-->
        ${url5}<!-- 输出:testUrl?name=aaa  -->
    
    </body>
    </html>
    
    

    4.set标签

    • 作用是向pagerequestsessionapplication域对象中加入一个属性值

    • 该标签的value属性也会自动地对value值进行OGNL解析

    Demo

    <!-- 不想value属性被自动进行OGNL解析,加上单引号-->
    <s:set var="productName" value="'555'" scope="request"></s:set>
    <!-- 读取该值-->
    pro:${requestScope.productName} <!--输出:pro:555 -->
    

    5.push标签

    • 把一个对象在标签开始时压入在值栈中标签结束时弹出值栈

    Demo
    先新建一个Person类:

    package struts.valuestack;
    
    public class Person {
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    
    

    index.jsp:

    <%@ page import="struts.valuestack.Person" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            Person person = new Person();
            person.setName("Write");
            person.setAge(10);
            request.setAttribute("person",person);
        %>
        <s:push value="#request.person">
            ${name} <!-- 打印Write -->
        </s:push>
        ss: ${name} <!-- null -->
    
    </body>
    </html>
    
    

    6. if,else和else if标签

    这个直接看Demo吧

    <%@ page import="struts.valuestack.Person" %>
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="struts.valuestack.PersonComparator" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ taglib prefix="S" uri="/struts-tags" %>
    <%--
      Created by IntelliJ IDEA.
      User: 白菜
      Date: 2019/8/2
      Time: 13:04
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <!-- 可以直接使用值栈中的属性-->
        <!-- 这里为了简便,省略了Action类的代码,忽略这些值从哪来的问题-->
        <s:if test="productPrice > 2000">
            I7 处理器
        </s:if>
        <s:elseif test="productPrice > 800">
            I5处理器
        </s:elseif>
        <s:else>
            I3处理器
        </s:else>
        <s:if test="#request.person.age > 10">
            大于10
        </s:if>
        <s:else>
            其他
        </s:else>
    </body>
    </html>
    

    7.iterator标签

    • 遍历集合,并把这个可遍历对象的每一个元素依次压入和弹出值栈

    Demo

    <%@ page import="struts.valuestack.Person" %>
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="struts.valuestack.PersonComparator" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ taglib prefix="S" uri="/struts-tags" %>
    <%--
      Created by IntelliJ IDEA.
      User: 白菜
      Date: 2019/8/2
      Time: 13:04
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        
        <%
            List <Person> personList = new ArrayList <Person>();
            personList.add(new Person("bb",10));
            personList.add(new Person("cc",10));
            personList.add(new Person("gg",10));
            personList.add(new Person("aa",10));
            personList.add(new Person("ff",10));
            personList.add(new Person("ee",10));
            request.setAttribute("personList",personList);
    
        %>
        <s:iterator value="#request.personList" status="status">
            index:${status.index},count:${status.count},${name},${age}<br><br>
        </s:iterator>
    </body>
    </html>
    
    

    8.sort标签

    • 可以对集合中的元素进行排序

    • 关于<s:sort>的几个常用属性说明

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

    Demo:
    编写的比较器类:

    package struts.valuestack;
    
    import java.util.Comparator;
    
    public class PersonComparator implements Comparator<Person> {
    
        @Override
        public int compare(Person o1, Person o2) {
            //按名字来排序
            return o1.getName().compareTo(o2.getName());
        }
    }
    

    jsp代码:

    <%@ page import="struts.valuestack.Person" %>
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="struts.valuestack.PersonComparator" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ taglib prefix="S" uri="/struts-tags" %>
    <%--
      Created by IntelliJ IDEA.
      User: 白菜
      Date: 2019/8/2
      Time: 13:04
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            PersonComparator pc = new PersonComparator();
            request.setAttribute("comparator",pc);
        %>
        <s:sort comparator="#request.comparator" source="#request.personList" var="persons2">
            <s:iterator var="#attr.persons2">
                ${name},${age}
            </s:iterator>
        </s:sort>
    </body>
    </html>
    
    

    9.date标签

    • 可以对date对象进行排版
      例如:
      <s:date name="#session.date" format="yyyy-MM-dd hh:mm:ss" var="date2"></s:date>
      ${date2}

    10.a标签

    • <s:a ></s:a>标签将呈现为一个HTML超链接,这个标签可以接受HTML语言中的a元素所能接受的所有属性

    Demo

    <%@ page import="struts.valuestack.Person" %>
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="struts.valuestack.PersonComparator" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ taglib prefix="S" uri="/struts-tags" %>
    <%--
      Created by IntelliJ IDEA.
      User: 白菜
      Date: 2019/8/2
      Time: 13:04
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <s:iterator value="#request.personList">
            <!-- 可以使用%{}把属性包装起来,使其进行强制的OGNL解析-->
            <!-- 输出结果为:类似HTML中的a标签生成出来的超链接一样-->
            <s:a href="getPerson.action?name=%{name}">${name}</s:a>
        </s:iterator>    
    </body>
    </html>
    

    相关文章

      网友评论

        本文标题:Struts2学习笔记 | 通用标签

        本文链接:https://www.haomeiwen.com/subject/smijdctx.html