十五、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用来表示哪些被选中-->
十五、MVC的WEB框架(Structs2)的更多相关文章
- Python之路【第十五篇】WEB框架
WEB框架本质 Python的WEB框架分为两类: 1.自己写socket,自己处理请求 2.基于wsgi(Web Server Gateway Interface WEB服务网关接口),自己处理请求 ...
- 二十、MVC的WEB框架(Spring MVC)
一.Spring MVC 运行原理:客户端请求提交到DispatcherServlet,由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controlle ...
- 十三、MVC的WEB框架(Structs2)
一.Structs2的应用 Structs2是基于MVC的WEB框架.一般基于框架的程序要运行成功,对于JAR包的版本,配置文件的正确性有着苛刻的要求,一个地方错了,都会导致框架程序运行出错. 1.首 ...
- 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码
第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...
- 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签
第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需 ...
- 第三百一十五节,Django框架,CSRF跨站请求伪造
第三百一十五节,Django框架,CSRF跨站请求伪造 全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...
- Python开发【第十八篇】Web框架之Django【基础篇】
一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...
- Python之路【第二十篇】其他WEB框架
WEB框架功能分析 WEB框架本质上,就是一个SOCKET Server WEB框架前面有WSGI或者是自己写的SOCKET,然后交给URL路由系统处理,然后交给某个函数或某个类,然后在模板里拿到模板 ...
- Python之路【第十八章】:Web框架
Web框架本质 1.众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 #!/usr/bin/env python # -*- codin ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
随机推荐
- C#接口的作用详解
.C#接口的作用 : C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认 ...
- PHP 冒泡排序(Bubble Sort)
冒泡排序指的是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数.因为在排序的 过程中总是小数放前面,大数放后面,和气泡上升有点类似,所以又称作冒泡排序. 下面通过一个实例看一下如何实现冒泡排 ...
- Centos 7下添加新用户并授权
1.创建一个 xiaoyang 用户 [root@VM_81_181_centos ~]# adduser xiaoyang 2.为创建的用户设置密码 [root@VM_81_181_centos ~ ...
- 无法获取未定义或 null 引用的属性“contentWindow”
在iframe 中有时候 这样使用contentWindow 会报 无法获取未定义或 null 引用的属性“contentWindow” 这种情况 我是在IE中遇到 其他浏览器一切正常. pa ...
- 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?
Java中 Set 和 List 集合 的contains()方法,检查数组链表中是否包含某元素检查数组链表中是否包含某元素,使用 Set 而不使用 List 的原因是效率问题, 前者的 set ...
- rostopic demo
发布者 #!/usr/bin/env python2. # -*- coding: utf- -*- import rospy from hdw_driver.msg import update_fi ...
- ERROR: child process failed, exited with error number 100
[root@localhost ~]# mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --loga ...
- css sticker footer
.detail position: fixed z-index: 100 top: 0 left: 0 width: 100% height: 100% overflow: auto .detail- ...
- 关于ascii码的一些内容
1.通过C#程序输出tab(制表符)内容. 1.1常用方式我们可以是 //测试输出\t到文件 File.WriteAllText("test.txt", "a\tb\tc ...
- C#内存压缩zip文件
C#中我们使用比较多的文件压缩第三方DLL就是Ionic.Utils.Zip.dll.但是这个DLL只支持对现有文件进行压缩,而不支持内存压缩,如果需要使用内存压缩,那么有第三方DLL ICSharp ...