十五、MVC的WEB框架(Structs2)

一、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用来表示哪些被选中-->
原文地址:https://www.cnblogs.com/drq1/p/8572122.html