Struts2学习笔记 | 通用标签
2019-08-03 本文已影响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栈,打印
request
,session
,application
的某个属性值或者是某个请求参数的值 -
如果
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标签
-
作用是向
page
,request
,session
,application
域对象中加入一个属性值 -
该标签的
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>