一、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用来表示哪些被选中-->

十五、MVC的WEB框架(Structs2)的更多相关文章

  1. Python之路【第十五篇】WEB框架

    WEB框架本质 Python的WEB框架分为两类: 1.自己写socket,自己处理请求 2.基于wsgi(Web Server Gateway Interface WEB服务网关接口),自己处理请求 ...

  2. 二十、MVC的WEB框架(Spring MVC)

    一.Spring MVC 运行原理:客户端请求提交到DispatcherServlet,由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controlle ...

  3. 十三、MVC的WEB框架(Structs2)

    一.Structs2的应用 Structs2是基于MVC的WEB框架.一般基于框架的程序要运行成功,对于JAR包的版本,配置文件的正确性有着苛刻的要求,一个地方错了,都会导致框架程序运行出错. 1.首 ...

  4. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

  5. 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需 ...

  6. 第三百一十五节,Django框架,CSRF跨站请求伪造

    第三百一十五节,Django框架,CSRF跨站请求伪造  全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...

  7. Python开发【第十八篇】Web框架之Django【基础篇】

    一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...

  8. Python之路【第二十篇】其他WEB框架

    WEB框架功能分析 WEB框架本质上,就是一个SOCKET Server WEB框架前面有WSGI或者是自己写的SOCKET,然后交给URL路由系统处理,然后交给某个函数或某个类,然后在模板里拿到模板 ...

  9. Python之路【第十八章】:Web框架

    Web框架本质 1.众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 #!/usr/bin/env python # -*- codin ...

  10. Python3.5学习十八 Python之Web框架 Django

    Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...

随机推荐

  1. appium长按按钮

    public static AndroidDriver driver; /长按操作:waitAction的参数单位是ms/ public static void longClick(String id ...

  2. Unicode转字符串

    /// <summary> /// Unicode转字符串 /// </summary> /// <returns>The to string.</retur ...

  3. 小程序之image图片实现宽度100%,高度自适应

    哇 今天搞了半天  图片一直变形啊啊啊啊 宽度100%   高度给100%   给auto   完全不管用啊啊啊啊 然后最后最终!!!! 首先我们要给我们的图片一个100%的宽度!让它自适应!! .g ...

  4. 【Java】【控制流程】

    #栗子 丢手帕 & 菱形 & 金字塔import java.io.*;import java.util.*; public class Test_one { public static ...

  5. EsayUI + MVC + ADO.NET(项目架构)

    项目目录   1.项目架构: http://www.cnblogs.com/liuxiaoji/p/3922506.html  2.仓储基础接口: http://www.cnblogs.com/liu ...

  6. 堆排序 java实现

    import java.util.Arrays; /* * 思路: * 1.方法adjustDown:对于一个数组a[],针对第i个数进行向下(直到len-1)调整,使得该位置成为大顶堆 * 2.方法 ...

  7. fileInputStream.available()获取 文件的总大小

    available():返回与之关联的文件的字节数 我们用inputStream.available()获取 文件的总大小

  8. 使用Hexo搭建一个简单的博客(二)

    昨天想着用Hexo和github搭一个自己简单的博客,记录一下自己踩过的坑,具体的流程就不重复了,主要参考了一下几篇文章 GitHub+Hexo 搭建个人网站详细教程 使用Hexo+Github一步步 ...

  9. 将矩阵数据转换为栅格图 filled.contour()

    require(grDevices) # for colours filled.contour(volcano, color = terrain.colors, asp = 1) # simple x ...

  10. 力扣(LeetCode)520. 检测大写字母

    给定一个单词,你需要判断单词的大写使用是否正确. 我们定义,在以下情况时,单词的大写用法是正确的: 全部字母都是大写,比如"USA". 单词中所有字母都不是大写,比如"l ...