Struts2(六.用标签显示用户列表及Value Stack和Stack Context)
一.用Struts2标签显示用户列表
原理:
在struts中可以通过在action中将所有用户的信息存入到某个范围中,然后转向userlist.jsp,进行访问
原则:
在jsp网页上,尽量不要出现Java代码
1.main.jsp
<a href="${pageContext.request.contextPath}/user/list">用户列表</a>
2.user.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="user" namespace="/user" extends="all"> <!-- 通配符方式配置action,解决action太多的问题 -->
<action name="*" class="myuser.UserAction" method="{1}">
<!-- 控制action中局部跳转 -->
<result name="main">${pageContext.request.contextPath}/main.jsp</result>
<result name="login">${pageContext.request.contextPath}/login.jsp</result>
<!--
加了type="redirect"代表,容器外跳转
和跳转到的页面不是同一次服务器请求,不共享request
在这里容器外跳转是跳不到userlist.jsp的,因为通过浏览器无法访问web-inf目录下的文件夹,所以不能用容器外跳转
-->
<result name="list">/WEB-INF/user/userlist.jsp</result>
<result name="modify">/WEB-INF/user/modify.jsp</result>
</action>
</package>
</struts>
3.UserAciton
/**
* 用户列表
* @return
* @throws ClassNotFoundException
* @throws SQLException
* @throws NamingException
*/
public String list() throws ClassNotFoundException, SQLException, NamingException
{
UserDAO dao=new UserDAO();
ArrayList<User> list=dao.getUsers();
//存入ActionContext范围之内
ActionContext ctx=ActionContext.getContext();
ctx.put("USERLIST", list);
return "list";
}
4.UserDAO
/**
* 得到用户列表
* @return
* @throws SQLException
*/
public ArrayList<User> getUsers() throws SQLException
{
ArrayList<User> list=new ArrayList<User>();
sql="select * from users";
ps=conn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
while(rs.next())
{
User user=new User();
user.setId(rs.getInt(1));
user.setUserName(rs.getString(2));
user.setPwd(rs.getString(3));
list.add(user);
}
conn.close();
return list;
}
5.userlist.jsp
把userlist.jsp放入WEB/INF/目录下,让用户不能直接访问,因为如果直接访问,不走action取不到数据
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户列表</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/style.css">
<script type="text/javascript" src="${pageContext.request.contextPath}/jslib/jquery-1.11.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/layer/layer.min.js"></script>
</head>
<body>
用户列表
<br>
<br>
<table class="bordered">
<thead>
<tr><th>序号</th><th>用户名</th><th>密码</th><th>照片</th><th>删除</th><th>修改</th></tr>
</thead>
<!-- USERLIST,cuser,s存入的Stack Context -->
<s:iterator value="#USERLIST" id="cuser" status="s">
<tr>
<td><s:property value="#s.index+1"/></td>
<td><s:property value="#cuser.userName"/></td>
<td><s:property value="#cuser.pwd"/></td>
</tr>
</s:iterator>
</table>
<br>
<br>
<a href="${pageContext.request.contextPath}/main.jsp">返回主页面</a>
</body>
<!-- 调试
Value Stack 访问时不用加#
Stack Context 访问时要加#
-->
<s:debug></s:debug>
</html>
二.Value Stack和Stack Context
利用struts2的标签可以进行查看
<!-- 调试
Value Stack 访问时不用加#
Stack Context 访问时要加#
-->
<s:debug></s:debug>
1.Value Stack
值栈
里面存放的数据访问时不用加#
2.Stack Context
里面存放的数据访问时要加#
用法:
在Action中把userlist存入了ActionContext范围之内
<!-- USERLIST,cuser,s存入的Stack Context -->
<s:iterator value="#USERLIST" id="cuser" status="s">
<tr>
<td><s:property value="#s.index+1"/></td>
<td><s:property value="#cuser.userName"/></td>
<td><s:property value="#cuser.pwd"/></td>
</tr>
</s:iterator>
</table>
<br>
<br>
<a href="${pageContext.request.contextPath}/main.jsp">返回主页面</a>
</body>
Struts2(六.用标签显示用户列表及Value Stack和Stack Context)的更多相关文章
- 利用struts2<s:token>标签防止用户重复提交
当用户填写完表单后,在提交过一次后,若用户做如下操作比如再次点击提交.刷新页面.提交页面呈现后点击后退按钮,都会导致表单重复提交.如果信息需要存储到后台数据库中,重复提交就会再次向数据库中插入用户信息 ...
- java web从零单排第二十一期《Hibernate》主键的生成方式,用户增加与显示用户列表
1.新建register.jsp <%@ page language="java" import="java.util.*" pageEncoding=& ...
- Identity用户管理入门二(显示用户列表)
在Controllers中新建AccountController,并在构造方法(函数)中注入SignInManager,UserManager UserManager 用户管理(注册,查找,修改, ...
- struts2使用iterator标签显示嵌套Map - 云自无心水自闲 - BlogJava
"> <s:iterator value="dataMap.keySet()" id="class"> ...
- Laravel大型项目系列教程(四)显示文章列表和用户修改文章
小编心语:不知不觉已经第四部分了,非常感谢很多人给小编提的意见,改了很多bug,希望以后能继续帮小编找找茬~小编也不希望误导大家~这一节,主要讲的 是如何显示文章列表和让用户修改文章,小编预告一下(一 ...
- PHP自学3——在html的<table>标签中显示用户提交表单
为了更好地显示用户提交表单,本节将在上一节的基础上将读取的用户表单显示在html的<table>标签中,这一节将用到和数组有关的知识. 本节代码将从外部文件(.txt文件)中读取信息于指定 ...
- 使用mybatis提供的各种标签方法实现动态拼接Sql。这里演示where标签和if标签实现使用姓名的模糊查询和性别查询用户列表,当用户没有选择姓名以及性别时查询出所有的记录。
1.需求: 使用姓名的模糊查询和性别查询用户列表,当用户没有选择姓名以及性别时查询出所有的记录. 2.在UserMapper接口中定义方法: public List<User> findU ...
- last, lastb - 显示最近登录的用户列表
总览 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...] lastb [-R] [-num] [ -n num ] ...
- Easyui Datagrid 如何实现后台交互显示用户数据列表
转自:https://blog.csdn.net/Tomsheng321/article/details/50722571?utm_source=blogxgwz9 新手初学的时候可能有个疑问:如何在 ...
随机推荐
- 【luogu P1462 通往奥格瑞玛的道路】 题解
题目链接:https://www.luogu.org/problemnew/show/P1462 记住HP=0也叫死. #include <queue> #include <cstd ...
- 简单实现CombineFileInputFormat
import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.conf.Configuration; ...
- UML 类关系图(泛化,实现,依赖,关联(聚合,组合))
UML的构造快包含3种: (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系 (3) 图(10种):用例图,类图,对象图,包图 ...
- 课时15.DTD文档声明下(了解)
W3C的官方网站是W3School,我们可以去官方网站查询DTD文档声明. HTML4.01 Strict 非常严谨的 如果你写了这个DTD文档声明,你就不能写如下样式: <fon ...
- 零基础Python知识点回顾(三)
元组 元组是用圆括号括起来的,其中的元素之间用逗号隔开.(都是英文半角)tuple(元组)跟列表类似是一种序列类型的数据,特点就是其中的元素不能更改 既然是有序的,那么,嘿嘿,不错,它也可以有索引,能 ...
- 一位90后程序员的自述:如何从年薪3w到30w
▌自我介绍 引用赵真老师的一首歌<过去不是错>中的一句话:过去不是过错,毕竟我们也开心过.过去不是过错,何必愧疚不知所措. 我们这一代人,我相信多少都会有人和我一样,坚持过一个游戏,叫 D ...
- ABAP术语-Database Rollback
Database Rollback 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/24/1051238.html Operation tha ...
- oracle12c管理作业资源的一种方式
数据库:12.1.0.2,rac,cdb模式 笔者负责移动两个12.1.0.2的cdb集群,一个在aix上,一个在linux上,不幸的是,它们都是混合型,数据有100多T. 由于其它部门交付的时候,已 ...
- spring boot 小案例
1. SpringBoot 1.1. 概要 在传统的SSM框架应用过程中,存在大量的配置文件,及相关的配置项,例如: 1. DispatcherServlet 2. CharacterEncoding ...
- python 摘要算法
一.概述: 摘要算法主要特征是加密过程不需要密钥,并且加密的数据无法解密,只有输入相同的明文数据经过相同的摘要算法才能得到相同的密文.摘要算法主要应用在“数字签名”领域.接下来会讲述RSA公司的MD5 ...