一、Structs标签
与JSTL标签库类似,Structs2也有专属标签库
常见的标签有:from,iterator,check,radio,select
1、form标签
用于提交数据
<%@page isElIgnored="false"%> <%@ taglib prefix="s" uri="/structs-tags"%> <html> <body> <s:form action="addProduct"> <s:textfield name="product.name" lable="product name"/> <s:submit value="Submit"/> </s:form> </body> </html>
通过浏览器可以查看源码,structs2里的form标签被转化为了table
<form id="addProduct" name="addProduct" action="addProduct.action" method="post"> <table> <tr> <td> <label for="addProduct_product_name" class="label">product name:</label> </td> <td> <input type="text" name="product.name" value="" id="addProduct_product_name"/> </td> </tr> <tr> <td colspan="2"> <div align="right"><input type="submit" value="Submit"/></div> </td> </tr> </table> </form>
2、iterator标签
与JSTL标签库里的<c:forEach>类似,structs的<s:iterator>用于遍历一个集合中的数据
2.1、首先给ProductAction增加list方法。
import java.util.List; import com.demo.Model.Product; public class ProductAction { private Product product; private List<Product> products;//增加products属性,类型List //属性的getter/setter方法 public List<Product> getProducts() { return products; } public void setProducts(List<Product> products) { this.products = products; } public String show() { product = new Product(); product.setName("iphone7"); return "show"; } public String add() { return "show"; } //list()方法,为products添加3个product对象,然后返回list public String list() { products=new ArrayList(); Product p1 = new Product(); p1.setId(1); p1.setName("product1"); Product p2 = new Product(); p2.setId(2); p2.setName("product2"); Product p3 = new Product(); p3.setId(3); p3.setName("product3"); products.add(p1); products.add(p2); products.add(p3); return "list"; } public Product getProduct() { return product; } public void setProduct(Product product) { this.product = product; } }
2.2、重新配置structs.xml
配置路径listProduct,然后返回list.jsp
<action name="listProduct" class="com.demo.action.ProductAction" method="list"> <result name="list">list.jsp</result> </action>
2.3、编写list.jsp
使用是s:iterator标签进行遍历
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@page isELIgnored="false"%> <style> table { border-collapse: collapse; } td { border: 1px solid gray; } </style> <table align="center"> <tr> <td>id</td> <td>name</td> <td>st.index</td> <td>st.count</td> <td>st.first</td> <td>st.last</td> <td>st.odd</td> <td>st.even</td> </tr> <!--var:表示遍历出来的元素,st:表示遍历出来的元素状态--> <s:iterator value="products" var="p" status="st"> <tr> <td>${p.id}</td> <td>${p.name}</td> <!--当前行号从0开始--> <td>${st.index}</td> <!--当前行号从1开始--> <td>${st.count}</td> <!--是否是第一个元素--> <td>${st.first}</td> <!--是否是最后一个元素--> <td>${st.last}</td> <!--是否是奇数--> <td>${st.odd}</td> <!--是否是偶数--> <td>${st.even}</td> </tr> </s:iterator> </table>
3、check标签
类似于checkbox标签,用于勾选的
3.1、给ProductAction增加一个ListSelectdProducts属性
package com.demo.action; import java.util.ArrayList; import java.util.List; import com.demo.Model.Product; public class ProductAction { private Product product; private List<Product> products; private List<Integer> selectedProducts;//增加选中属性,为了使用structs的check标签 //属性的setter/getter方法 public List<Integer> getSelectedProducts() { return selectedProducts; } public void setSelectedProducts(List<Integer> selectedProducts) { this.selectedProducts = selectedProducts; } public List<Product> getProducts() { return products; } public void setProducts(List<Product> products) { this.products = products; } public String show() { product = new Product(); product.setName("iphone7"); return "show"; } public String add() { return "show"; } public String list() { products=new ArrayList(); selectedProducts = new ArrayList(); Product p1 = new Product(); p1.setId(1); p1.setName("product1"); Product p2 = new Product(); p2.setId(2); p2.setName("product2"); Product p3 = new Product(); p3.setId(3); p3.setName("product3"); products.add(p1); products.add(p2); products.add(p3); selectedProducts.add(2); selectedProducts.add(3); return "list"; } public Product getProduct() { return product; } public void setProduct(Product product) { this.product = product; } }
4、使用s:checkboxlist标签
<s:checkboxlist value="selectedProducts" name="product.id" list="products" listValue="name" listKey="id"/> <!--在s:checkoxlist标签中,value是指定那些被选中,name:是提交到服务端用的名称list:用于遍历的集合,listValue显示和checkbox的名称,listKey用来存checkbox的value-->
5、使用s:radio标签
类似html的radio标签。
<s:radio name="product.id" value="2" list="products" listValue="name" listKey="id" /> <!--value用来表示哪一项被选中,name用来表示提交到服务端用的名称,list用来表示遍历的集合,listValue用来显示radio的名称,listKey用来存储radio的value-->
6、使用s:select标签
<s:select label="products" name="product.id" list="products" listKey="id" listValue="name" multiple="true" size="3" value="selectedProducts" /> <!--name表示提交到服务端用的名称,list用于遍历的集合,listKey用来存每个option选项的value,listValue用来显示名称,multiple值为true时表示可以选中多行,size=3表示默认显示3行,value用来表示哪些被选中-->