Struts学习-通用标签

Posted 王育奕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts学习-通用标签相关的知识,希望对你有一定的参考价值。

一.*property 标签

示例: 输出 Action 属性 customerId 的值: <s:property value=“customerId”/> 输出 session 属性 userName 的值: <s:property value=“#session.userName”/>

如果 value 属性没有给出, ValueStack 值栈栈顶对象的值被输出

在许多情况下, JSP EL 可以提供更简洁的语法

二.*url 标签

三.*param 标签

param 标签用来把一个参数传递给包含着它的那个标签

 

 

无论在给出 value 值时有没有使用 %{}, Struts 都会对它进行 ognl 求值

如果想传递一个 String 类型的字符串作为参数值, 必须把它用单引号括起来.

可以把 value 属性的值写在开始标签和结束标签之间. 利用这种方式来传递一个 EL 表达式的值

 四.set 标签

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

  1. ValueStack 值栈的
  2. ContextMap 值栈
  3. Map 类型的 session
  4. 对象 Map 类型的
  5. application 对象
  6. Map 类型的
  7. request 对象
  8. Map 类型的
  9. page 对象

 

五.*if, else 和 elseif 标签

这三个标签用来进行条件测试, 它们的用途和用法类似于 if, else 和 elseif 关键字. 其中 if 和 elseif 必须有 test 属性

 

 

六.*iterator 标签

 

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

 

 

在开始执行时, iterator 标签会先把 IteratorStatus 类的一个实例压入 ContextMap, 并在每次遍历循环时更新它.

可以将一个指向 IteratorStatus 对象的变量赋给 status 属性.

 

iterator 标签的 status 属性的属性值

 

七.*sort 标签

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

八*date 标签

date 标签用来对 Date 对象进行排版

 

 

 

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

 

九.*a 标签

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

 

十.action 标签

action 标签用在页面上来执行一个 action. action

标签还会把当前 Action 对象压入 ValueStack 值栈的 ContextMap 子栈.

十一.bean 标签

 

bean 标签将创建一个 JavaBean, 并把它压入 ValueStack 值栈的 ContextMap 子栈.

这个标签的功能与 JSP 中的 useBean 动作元素很相似

十二.include 标签

include 标签用来把一个 Servlet 或 JSP 页面的输出包含到当前页面里来.

十三.append, merge 标签

append 标签用来合并可遍历对象. merge 标签用来交替合并可遍历对象.

示例:

十四.generator 标签

generator 标签用来生成一个可遍历对象并把它压入 ValueStack 栈.

generator 标签结束标记将弹出遍历对象

如果在一个 generator 标签里给出了 converter 属性, 新生成的可遍历对象里的每一个元素都会传递到该属性所指定的方法进行必要的转换.

 

示例.

十五.subset 标签

subset 标签用来创建一个可遍历集合的子集. subset 标签通过 decider 属性来创建一个可遍历集合的子集.

示例:

 

 

实例

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  
        <filter>
                <filter-name>struts2</filter-name>
                <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>

        <filter-mapping>
                <filter-name>struts2</filter-name>
                <url-pattern>/*</url-pattern>
        </filter-mapping>
</web-app>

 

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<!-- 打开静态方法调用的限制 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<!-- 配置Struts可以受理的请求的扩展名 -->
<constant name="struts.action.extension" value="action,do"></constant>

  <package name="default"  extends="struts-default">
  
    <action name="product-input">
     <result>/input.jsp</result>
    </action>
    
    <action name="product-save" class="com.yuyi.struts.valueStack.Product"  method="save">
    
     <exception-mapping result="input" exception="java.lang.ArithmeticException"></exception-mapping>
     <result name="input">/input.jsp</result>
     
     <result name="details">/details.jsp</result>
    </action>
    
    <action name="testTag" class="com.yuyi.struts.valueStack.Product"
    method="testTag">
    <result>/common-tag.jsp</result>
    </action>
</package>
   
</struts>

 

index.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <a href="product-input.action">product-input</a>
  <br><br>
  <a href="testTag.action?name=yuyi">Test Tag</a>
  
  <br><br> 
  <%
       session.setAttribute("date", new Date());
  %>
  <br><br>
  <form action="testTag.action">
    <input type="text" name="username"/>
    <input type="submit" value="Submit" >
  </form>
</body>
</html>

 

common-tag.jsp

<%@page import="com.yuyi.struts.valueStack.PersonComparator"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.yuyi.struts.valueStack.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:debug></s:debug>
<br>
s:property:打印值栈中的属性值的:对于对象栈,打印值栈中对应的属性值
<br><br>
productName:<s:property value="productName"/>
<br><br>
对于Map栈,打印request,session,application的某个属性值或某个请求参数的值
<br><br>
date:<s:property value="#session.date"/>
<br><br>
<s:property value="#parameters.name[0]"/>
<br><br>
s:url:创建一个URL字符串的
<br><br>
<s:url value="/getProduct" var="url">
<!-- 对于value值会自动的进行OGNL解析 -->
  <s:param name="productId" value="1002"></s:param>
</s:url>
${url}
<br><br>
<s:url value="/getProduct" var="url2">
  <s:param name="productId" value="productId"></s:param>
  <s:param name="date" value="#session.date"></s:param>
</s:url>
${url2}
<br><br>
<s:url value="/getProduct" var="url3">
  <s:param name="productId" value=""></s:param>
</s:url>
${url3}
<br><br>
<s:url action="testAction" namespace="/helloWorld" method="save" var="url4"></s:url>
${url4}
<br><br>
<s:url value="testUrl" var="url5" includeParams="get"></s:url>
${url5}
<br><br>
s:set:向page,request,session,application域对象中加入一个属性值
<s:set name="productName" value="productName" scope="request"></s:set>
<br><br>
productName:${requestScope.productName }
<br><br>
s:push:把一个对象在标签开始后压入到值栈中,标签结束时,弹出值栈
<% 
 Person person=new Person();
person.setName("YUYI");
person.setAge(10);
request.setAttribute("person", person);
%>
<s:push value="#request.person">
name:${name }
</s:push>
<br><br>
--${name}--
<br><br>
if,else if,else
<!-- 可以直接使用值栈中的属性 -->
<s:if test="productPrice>1000">
高档电脑
</s:if>
<s:elseif test="productPrice>800">
中档电脑
</s:elseif>
<s:else>
低档电脑
</s:else>
<br><br>
<s:if test="#request.person.age>8">
大于8岁
</s:if>
<s:else>
小于或等于8岁
</s:else>
<br><br>
s:iterator:遍历集合的.把这个可遍历对象里的每一个元素依次压入和弹出
<br><br>
<%
  List<Person> persons=new ArrayList<Person>();

  persons.add(new Person("AA",10));
  persons.add(new Person("BB",20));
  persons.add(new Person("CC",30));
  persons.add(new Person("DD",40));
  persons.add(new Person("EE",50));
  request.setAttribute("persons", persons);
%>

<s:iterator value="#request.persons">
   ${name } - ${age }<br>
</s:iterator>
<br><br>
<s:iterator value="persons">
  ${name } - ${age }<br>
</s:iterator>
<br><br>
s:sort 可以对集合总的元素进行排序
<br><br>
<%
    PersonComparator pc=new PersonComparator();
    request.setAttribute("comparator", pc);
%>
<s:sort comparator="#request.comparator" source="persons" var="persons2"></s:sort>

<s:iterator value="#attr.persons2">
  ${name } - ${age }<br>
</s:iterator>
<br><br>
s:date 可以对Date对象进行排版
<br><br>
<s:date name="#session.date" format="yyyy-MM-dd hh:mm:ss" var="date2"/>
${date2 }
<br><br>
<s:iterator value="persons">
<!-- 可以为使用%{}把属性包装起来,使其进行强制的OGNL解析 -->
  <s:a href="getPerson.action?name=%{name}">${name}<br></s:a>
</s:iterator>
</body>
</html>

 

Product.java

package com.yuyi.struts.valueStack;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;

public class Product implements RequestAware,SessionAware{

    private Integer productId;
    private String productName;
    private String productDesc;
    private double productPrice;

    public Integer getProductId() {
        return productId;
    }
    public void setProductId(Integer productId) {
        this.productId = productId;
    }
    public String getProductName() {
        return productName;
    }
    public void setProductName(String productName) {
        this.productName = productName;
    }
    public String getProductDesc() {
        return productDesc;
    }
    public void setProductDesc(String productDesc) {
        this.productDesc = productDesc;
    }
    public double getProductPrice() {
        return productPrice;
    }
    public void setProductPrice(double productPrice) {
        this.productPrice = productPrice;
    }
    @Override
    public String toString() {
        return "Product [productId=" + productId + ", productName=" + productName + ", productDesc=" + productDesc
                + ", productPrice=" + productPrice + "]";
    }
    
    List<Person> persons=new ArrayList<Person>();
    
    public List<Person> getPersons() {
        return persons;
    }
    public void setPersons(List<Person> persons) {
        this.persons = persons;
    }
    public String testTag() {
        
        this.productId=1001;
        this.productName="computer";
        this.productDesc="Lenove";
        this.productPrice=1100;
        
          persons.add(new Person("CCC",30));
          persons.add(new Person("AAA",10));
          persons.add(new Person("BBB",20));
          persons.add(new Person("EEE",50));
          persons.add(new Person("DDD",40));
        
        return "success";
        
    }
    
    public String save() {
        System.out.println("save:"+this);
        
        //1.获取值栈
        ValueStack valueStack=ActionContext.getContext().getValueStack();
        //2.创建Test对象,并为其属性赋值
        Test object=new Test();
        object.setProductName("AABBCC");
        object.setProductDesc("AABBCCDD");
        //3.把Test对象压入值栈的栈顶
        valueStack.push(object);
        
        session.put("product", this);
        request.put("test", object);
        
        int i=10/0;
        
        return "details";
    }
    private Map<String, Object> session;
    @Override
    public void setSession(Map<String, Object> arg0) {
        this.session=arg0;
        
    }
    private Map<String, Object> request;
    @Override
    public void setRequest(Map<String, Object> arg0) {
        this.request=arg0;
        
    }
}

 

Test.java

package com.yuyi.struts.valueStack;

public class Test {
    private String productName;
    private String productDesc;
    public String getProductName() {
        return productName;
    }
    public void setProductName(String productName) {
        this.productName = productName;
    }
    public String getProductDesc() {
        return productDesc;
    }
    public void setProductDesc(String productDesc) {
        this.productDesc = productDesc;
    }
}

 

以上是关于Struts学习-通用标签的主要内容,如果未能解决你的问题,请参考以下文章

Struts学习-通用标签

struts2通用标签

Struts(十三):通用标签

Struts2学习———— s标签和国际化

Struts(十四):通用标签-form表单

struts2 OGNL配和通用标签和其它标签的使用