SSM:
spring;springMVC;MyBatis
1.基本配置
(1) 导入jar包
(2)创建MyBatis配置文件:mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--设置懒加载 => 立即加载-->
<settings>
<!-- changes from the defaults -->
<setting name="lazyLoadingEnabled" value="false" />
</settings>
<typeAliases>
<!--这里给实体类取别名,方便在mapper配置文件中使用-->
<package name="com.offcn.entity"/>
</typeAliases>
</configuration>
(3)创建数据源文件:database.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/dbs0315?useUnicode=true&characterEncoding=utf-8
user=root
password=root
minIdle=45
maxIdle=50
initialSize=5
maxActive=100
maxWait=100
removeAbandonedTimeout=180
removeAbandoned=true
(4)spring整合mybatis配置文件:applicationContext-myBatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描dao层 service -->
<context:component-scan base-package="com.xxx.dao"/>
<context:component-scan base-package="com.xxx.service"/>
<!-- 开启spring的注解模式-->
<context:annotation-config />
<!--数据源-->
<context:property-placeholder location="classpath:database.properties"/>
<!-- JNDI获取数据源(使用dbcp连接池) scope="singleton"单例 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" scope="singleton">
<!--必须的四项-->
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
<property name="initialSize" value="${initialSize}"/>
<property name="maxActive" value="${maxActive}"/>
<property name="maxIdle" value="${maxIdle}"/>
<property name="minIdle" value="${minIdle}"/>
<property name="maxWait" value="${maxWait}"/>
<property name="removeAbandoned" value="${removeAbandoned}"/>
<property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"/>
<property name= "testWhileIdle" value="true"/>
<property name= "timeBetweenEvictionRunsMillis" value="60000"/>
<property name= "testOnBorrow" value="false"/>
<property name= "testOnReturn" value="false"/>
<property name= "validationQuery" value="select 1"/>
<property name= "numTestsPerEvictionRun" value="${maxActive}"/>
</bean>
<!-- 事务管理 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置mybatis SqlSessionFactoryBean -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--设置对那些方法进行事务管理-->
<tx:advice id="myAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="appsys*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<!--动态代理-->
<aop:aspectj-autoproxy/>
<!--aop定义切点表达-->
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution(* *com.offcn.service..*(..))" id="transService"/>
<aop:advisor advice-ref="myAdvice" pointcut-ref="transService"/>
</aop:config>
<!--扫描所有dao的接口和xml文件-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.offcn.dao"/>
</bean>
</beans>
(5) 配置spring MVC文件:springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--扫描控制器包-->
<context:component-scan base-package="com.offcn.controller"/>
<!--注解驱动 配置json转换器-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
</list>
</property>
<property name="features">
<list>
<value>WriteDateUseDateFormat</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!--静态资源文件配置-->
<mvc:resources location="/statics/" mapping="/statics/**"></mvc:resources>
<!-- 配置多视图解析器 -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="favorParameter" value="true"/>
<property name="defaultContentType" value="text/html" />
<property name="mediaTypes">
<map>
<entry key="html" value="text/html; charset=UTF-8"/>
<entry key="json" value="application/json; charset=UTF-8"/>
<entry key="xml" value="application/xml; charset=UTF-8"/>
</map>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
</bean>
<!-- 配置interceptors -->
<!--<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/manager/backend/**"/>
<mvc:mapping path="/dev/flatform/**"/>
<bean class="cn.appsys.interceptor.SysInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>-->
<!-- 配置文件上传 MultipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="500000000"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
</beans>
(6) log4j.properties
log4j.rootLogger=debug,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE
log4j.logger.cn.smbms=debug
log4j.logger.org.apache.ibatis=debug
log4j.logger.org.mybatis.spring=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=debug
######################################################################################
# Console Appender \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e
######################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=debug
log4j.appender.CONSOLE.DatePattern=yyyy-MM-dd
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= - (%r ms) - %d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n
######################################################################################
# Rolling File \u6587\u4ef6\u5927\u5c0f\u5230\u8fbe\u6307\u5b9a\u5c3a\u5bf8\u7684\u65f6\u5019\u4ea7\u751f\u4e00\u4e2a\u65b0\u7684\u6587\u4ef6
######################################################################################
#log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
#log4j.appender.ROLLING_FILE.Threshold=INFO
#log4j.appender.ROLLING_FILE.File=${baojia.root}/logs/log.log
#log4j.appender.ROLLING_FILE.Append=true
#log4j.appender.ROLLING_FILE.MaxFileSize=5000KB
#log4j.appender.ROLLING_FILE.MaxBackupIndex=100
#log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n
######################################################################################
# DailyRolling File \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11
######################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=${AppInfoSystem.root}/logs/log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern= - (%r ms) - %d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n
#DWR \u65e5\u5fd7
#log4j.logger.org.directwebremoting = ERROR
#\u663e\u793aHibernate\u5360\u4f4d\u7b26\u7ed1\u5b9a\u503c\u53ca\u8fd4\u56de\u503c
#log4j.logger.org.hibernate.type=DEBUG,CONSOLE
#log4j.logger.org.springframework.transaction=DEBUG
#log4j.logger.org.hibernate=DEBUG
#log4j.logger.org.acegisecurity=DEBUG
#log4j.logger.org.apache.myfaces=TRACE
#log4j.logger.org.quartz=DEBUG
#log4j.logger.com.opensymphony=INFO
#log4j.logger.org.apache.struts2=DEBUG
log4j.logger.com.opensymphony.xwork2=debug
(7)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 指定Spring Bean的配置文件所在目录
在web.xml中通过contextConfigLocation配置spring,
contextConfigLocation参数定义了要装入的 Spring 配置文件。
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<!-- spring字符编码过滤器start-->
<filter>
<!--① Spring 编码过滤器 -->
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<!--② 编码方式 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!--③ 强制进行编码转换 -->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- ② 过滤器的匹配 URL -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring字符编码过滤器end-->
<!-- Spring MVC配置 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Spring配置 -->
<!-- 当系统启动的时候,spring需要进行一些资源加载或者配置,都需要使用此监听去做 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- log4j配置start -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!-- Spring 加载 Log4j 的监听 -->
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
<!-- log4j配置end -->
</web-app>
配置完毕:
2.测试
(1)用户登录
1.1 entity(实体类): User.java
import java.io.Serializable;
public class User implements Serializable {
private int uid;
private String uname;
private String upwd;
//getter;
//setter;
}
2.1 dao层:UserMapper.java
import com.xxx.entity.User;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
User selectByUname(@Param("uname") String uname); //主键查询
}
2.2 dao层实现:UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.dao.UserMapper">
<select id="selectByUname" resultType="User">
select * from user
<trim prefix="where" prefixOverrides="and | or">
<if test="uname != null">
and uname=#{uname}
</if>
</trim>
</select>
</mapper>
3.1 service层 :UserMapperService.java
import com.xxx.entity.User;
public interface UserService { //接口
User selectByUname(String uname,String upwd);
}
3.2 service层实现:UserMapperServiceImpl.java
import com.xxx.dao.UserMapper;
import com.xxx.entity.User;
import com.xxx.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service("userService")
public class UserServiceImpl implements UserService { //实现接口,重写方法
@Resource //注入
private UserMapper userMppig;
@Override
public User selectByUname(String uname, String upwd) {
User user = userMppig.selectByUname(uname);
if (user != null) {
if(upwd.equals(user.getUpwd())){
return user;
}
}
return null;
}
}
4.1 controller(控制层) UserController.java
import com.xxx.entity.User;
import com.xxx.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@Controller //注解
public class UserController {
@Resource //注入
private UserService userService;
//url
@RequestMapping(value = "doLogin")
//接收.jsp页面中传入的用户名和密码 例:<input type="text" name="uname"/>
//@RequestParam获取前端页面对应"name"的value
public String doLongin(@RequestParam(value = "uname" ,required = false)String uname,
@RequestParam(value = "upwd",required = false)String upwd,
HttpServletRequest request,
Model model){
//调用service层方法,传参,获取对象信息
User user = userService.selectByUname(uname, upwd);
//model.addAttribute("msg","");
//判断是否数据库中存在对应用户,重定向登录
if (user != null) {
request.getSession().setAttribute("user",user);
return "redirect:doStudent";
}else {
model.addAttribute("msg","您输入的用户名或密码错误");
return "index";
}
}
}
(2) 一对多分页查询(student,grands)
1.1 entity(同上)
import java.io.Serializable;
import java.util.Date;
public class Student implements Serializable {
private int sid;
private String sname;
private String sage;
private Date sdate;
//setter;
//getter;
}
import java.io.Serializable;
public class Grand implements Serializable {
private int gid;
private String gname;
private String gdesc;
//setter;
//getter;
}
2.2 dao层
2.2.1.1 StudentMapper.java
import com.xxx.entity.Student;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface StudentMapper {
//多方主键查询所有信息,gid:主键;from:索引起始值;pageSize:单页数据条数
//注解@Param对应值,可用#{}获取
List<Student> selectByAll(@Param("gid") Integer gid,
@Param("from") Integer from,
@Param("pageSize") Integer pageSize);
//一方主键,计数多方
Integer selectCount(@Param("gid")Integer gid);
//多方主键删除
Integer deleteById(@Param("sid")Integer sid);
}
2.2.1.2 StudentMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.dao.StudentMapper">
<!--id与.java中的方法名对应;resultType对应返回值类型,下同-->
<select id="selectByAll" resultType="Student">
SELECT s.sid,s.sname,s.sage,s.sdate,s.gid, <!--sql语句,子查询-->
(SELECT gname FROM grade g where s.gid=g.gid)AS gname FROM student s
<trim prefix="where" prefixOverrides="and | or">
<if test="gid != null">
and s.gid=#{gid}
</if>
</trim>
limit #{from},#{pageSize} <!--取对应@param单一属性值-->
</select>
<select id="selectCount" resultType="Integer">
SELECT count(1) FROM student s
<trim prefix="where" prefixOverrides="and | or">
<if test="gid != null">
and s.gid=#{gid}
</if>
</trim>
</select>
<insert id="deleteById">
delete from student where sid=#{sid}
</insert>
</mapper>
2.2.2.1 GrandMapper.xml
import com.xxx.entity.Grand;
import java.util.List;
public interface GrandMapper {
List<Grand> selectAll(); //一方查询全部
}
2.2.2.2 GrandMapperImpl.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.dao.GrandMapper">
<select id="selectAll" resultType="Grand">
select * from grade
</select>
</mapper>
2.3 service层
2.3.1.1 StudentService.java
import com.xxx.entity.Student;
import java.util.List;
public interface StudentService {
//一方主键查询,分页索引,单页数据条数
List<Student> selectByAll(Integer gid, Integer from, Integer pageSize);
Integer selectCount(Integer gid);
Integer deleteById(Integer sid);
}
2.3.1.2 StudentServiceImpl.java
import com.xxx.dao.StudentMapper;
import com.xxx.entity.Student;
import com.xxx.service.StudentService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("StudentService") //控制层注解
public class StudentServiceImpl implements StudentService {
@Resource //注入bean
private StudentMapper studentMapper;
@Override
public List<Student> selectByAll(Integer gid, Integer from, Integer pageSize) {
//调用dao层方法,传参,下同
return studentMapper.selectByAll(gid, (from-1)*pageSize, pageSize);
}
@Override
public Integer selectCount(Integer gid) {
return studentMapper.selectCount(gid);
}
@Override
public Integer deleteById(Integer sid) {
return studentMapper.deleteById(sid);
}
}
2.3.2.1 GrandService.java
import com.xxx.entity.Grand;
import java.util.List;
public interface GrandService {
List<Grand> selectAll();
}
2.3.2.2 GrandServiceImpl.java
import com.xxx.dao.GrandMapper;
import com.xxx.entity.Grand;
import com.xxx.service.GrandService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class GrandServiceImpl implements GrandService {
@Resource
private GrandMapper grandMapper;
@Override
public List<Grand> selectAll() {
return grandMapper.selectAll();
}
}
2.4 Conroller (控制层)
import com.xxx.entity.Grand;
import com.xxx.entity.Student;
import com.xxx.service.GrandService;
import com.xxx.service.StudentService;
import com.xxx.util.PageUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import java.util.List;
@Controller //控制层注解
public class StudentController {
@Resource
private StudentService studentService;
@Resource
private GrandService grandService;
@RequestMapping("doStudent")
//获取前端页面传入的值,首次访问所有参数为空
public String doStudent(@RequestParam(value = "gid", required = false) String gidStr,
@RequestParam(value = "currentPageNo", required = false) String currentPageNo,
@RequestParam(value = "pageSize", required = false) String pageSize,
Model model) {
Integer gid = null;
if (gidStr != null && gidStr != "") {
gid = Integer.parseInt(gidStr);
}
Integer pageSizeInt = null;
if (pageSize == null || pageSize == "") {
pageSizeInt = 2;//默认单页数据条数
} else {
pageSizeInt = Integer.parseInt(pageSize);
}
//首次gid为空时,查询所有;再次传参时获取对应gid的数据总量
Integer totalPageCount = studentService.selectCount(gid);
//根据总数据值的奇偶性分别计算页数
Integer totalPageSize = totalPageCount % pageSizeInt == 0 ? totalPageCount / pageSizeInt : totalPageCount / pageSizeInt + 1;
//当前页
Integer currentPageNoInt = null;
if (currentPageNo == null || currentPageNo == "") {
currentPageNoInt = 1;
} else {
currentPageNoInt = Integer.parseInt(currentPageNo);
if (currentPageNoInt <= 1) {
currentPageNoInt = 1;
}
if (currentPageNoInt >= totalPageSize) {
currentPageNoInt = totalPageSize;
}
}
//将service层所需数据传入,获取对应gid的集合
List<Student> studentList = studentService.selectByAll(gid, currentPageNoInt, pageSizeInt);
//封装方法,存值
PageUtils<Student> pageUtils = new PageUtils<>();
pageUtils.setCurrentPageNo(currentPageNoInt);
pageUtils.setPageSize(pageSizeInt);
pageUtils.setTotalPageCount(totalPageCount);
pageUtils.setTotalPageSize(totalPageSize);
pageUtils.setPageSize(pageSizeInt);
pageUtils.setCommentUtils(studentList);
List<Grand> grandList = grandService.selectAll();
model.addAttribute("PageUtils", pageUtils);
model.addAttribute("grandList", grandList);
model.addAttribute("gid", gid);
return "showInfo";
}
//主键删除
@RequestMapping("deleteById")
public String deleteById(@RequestParam(value = "sid") String sid) {
int num = studentService.deleteById(Integer.parseInt(sid));
return "redirect:doStudent";
}
}
2.5 Util
package com.xxx.util;
import java.util.List;
public class PageUtils<T> {
//对应Controller属性
private Integer currentPageNo;
private Integer pageSize;
private Integer totalPageCount;
private Integer totalPageSize;
private List<T> commentUtils;
//getter;
//setter;
}
2.6 前端页面: .jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fm" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!--${pageContext.request.contextPath} 获取/web路径-->
<form action="${pageContext.request.contextPath}/doStudent" method="post">
选择班级
<select name="gid">
<!--遍历域对象,取值-->
<c:forEach items="${grandList}" var="grade">
<!--if作用:当前选择为选中状态-->
<option value="${grade.gid}" <c:if test="${gid==grade.gid}">selected</c:if>>${grade.gname}</option>
</c:forEach>
</select>
<input type="submit" value="提交">
</form>
<!--在表格中显示-->
<table border="1">
<tr>
<td>学号</td>
<td>姓名</td>
<td>年龄</td>
<td>时间</td>
<td>班级</td>
<td>操作</td>
</tr>
<c:forEach items="${PageUtils.commentUtils}" var="student">
<tr>
<td>${student.sid}</td>
<td>${student.sname}</td>
<td>${student.sage}</td>
<!--数据类型转换-->
<td><fm:formatDate value="${student.sdate}" pattern="yyy-MM-dd"></fm:formatDate></td>
<td>${student.gname}</td>
<td><a href="javascript:void (0)" onclick="deleteById(${student.sid})">删除</a></td>
</tr>
</c:forEach>
</table>
<%--${pageContext.request.contextPath}到web路径--%>
<!--拼接URL传值-->
<a href="${pageContext.request.contextPath}/doStudent?currentPageNo=1">首页</a>
<a href="${pageContext.request.contextPath}/doStudent?currentPageNo=${PageUtils.currentPageNo-1}">上一页</a>
<a href="${pageContext.request.contextPath}/doStudent?currentPageNo=${PageUtils.currentPageNo+1}">下一页</a>
<a href="${pageContext.request.contextPath}/doStudent?currentPageNo=${PageUtils.totalPageSize}">末页</a><br>
<span>共有${PageUtils.totalPageCount}记录</span><span>当前是${PageUtils.currentPageNo}页</span>
<!--定义方法-->
<script type="text/javascript">
function deleteById(temp) {
var flag = confirm("是否确认删除!");
if (flag) {
//alert("删除成功");
window.location.href = "${pageContext.request.contextPath}/deleteById?sid=" + temp;
}
// else {
// alert("删除失败")
// }
}
</script>
</body>
</html>