美文网首页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学习笔记 | 通用标签

    1.Struts2自动把Action对象放入到值栈中 放入的时间点在调用Action类中要调用的Action方法之...

  • Struts2学习笔记 | 表单标签

    概述 表单标签将在HTML文档里被呈现为表单元素 使用表单标签的优点表单回显对页面进行布局和排版 标签的属性可以被...

  • struts2标签

    layout: posttitle: struts2标签subtitle: struts2标...

  • 2018-05-14

    星期一 今天做了 看spring框架视频学习标签的注入上课学习Struts2标签 内容 spring整合web项目...

  • Struts2学习笔记(核心组件详解)

    [toc] Struts2学习笔记(核心组件详解) @(_1每日记录) 返回到JQuery学习笔记@达内lang笔...

  • Strut2-表单标签

    1、导入Struts2标签库 2、引入一些Struts2的一些css和js代码 3.使用Struts2的标签库

  • Struts2学习笔记 | 值栈和OGNL

    1.值栈(ValueStack) 引入值栈 在部署第一个Struts2时,Struts2学习笔记 | 部署第一个S...

  • 前端 html 常用标签 CSS 介绍

    学习目标: 了解html的基本结构 掌握标题标签: 掌握段落标签: 掌握通用块标签: 掌握图片标签: 掌握超链接标...

  • Struts2标签总结

    在这里总结一下Struts2标签: 一:常用的标签 1, if……elseif……else,用来控制选择输出的标签...

  • Struts2笔记

    Struts2笔记——Struts2的模型驱动(ModelDriven) 1. 模型驱动: 模型驱动是使用...

网友评论

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

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