Struts2学习笔记 | 通用标签

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

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

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


2.property标签

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

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

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

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

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


3.url标签

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

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

名字类型默认值说明
actionString可选,指定生成的url为哪个action
methodStringget可选,指定action的方法,当用action属性来生成url时,如果指定该属性,url将连接到指定的action方法上
namespaceString可选,指定url的命名空间
valueString可选,指定将生成的url值(如果新建的url不是一个action的话)
varString可选,指定用来被压入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>的几个常用属性说明

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

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值