一、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. 文档对象模型DOM

    文档对象模型 DOM 1 DOM概述 1.1 什么是DOM 文档对象模型 Document Object Model 提供给用户操作document obj 的标准接口 文档对象模型 是表示和操作 H ...

  2. 常用模块(json/pickle/shelve/XML)

    一.json模块(重点) 一种跨平台的数据格式 也属于序列化的一种方式 介绍模块之前,三个问题: 序列化是什么? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 反序列化又是什么? 将 ...

  3. _talent_req

    学习天赋时,将产生消耗,当玩家已经学习过该天赋时,不产生消耗 comment 备注 spellId 天赋技能ID reqId 消耗模板ID,对应_req表中reqId

  4. LCA 模板

    关于LCA: LCA 指树上两点的公共祖先. 如何 “暴力” 找两点的 LCA : 可以先 DFS 一遍求出每个点的 dep (深度).然后从深度大的点先往上跳,跳到与另一个点相同的深度,如果还没有到 ...

  5. 启动tomcat 报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

    [root@localhost META-INF]# systemctl start tomcat Job for tomcat.service failed because the control ...

  6. [转][linux]简单的linux下的tcp/udp

    转自:https://blog.csdn.net/cabing2005/article/details/53068880 详细函数以及参数解释请看原链接. windows下的tcp/udp参考:htt ...

  7. ES6的新API如Promise,Proxy,Array.form(),Object.assign()等,Babel不能转码, 使用babel-polyfill来解决

    Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator.Generator.Set.Maps.Proxy.Reflect.Symbol.Promis ...

  8. leecode第六十一题(旋转链表)

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

  9. 查看GPU占用率以及指定GPU加速程序

    GPU占用率查看: 方法一:任务管理器 如图,GPU0和GPU1的占用率如下显示. 方法二:GPU-Z软件       下面两个GPU,上面是GPU0,下面是GPU1 sensors会话框里的GPU  ...

  10. Centos 7 Docker安装配置

    版本介绍 Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE.社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设 ...