qiuxuhui

导航

Spring mvc 实现新闻查询,分类查询

一:分页

导入包

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
<!--1)spring 以及spring mvc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.0.14.RELEASE</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.0.14.RELEASE</version>
    </dependency>
<!--2)mysql驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.48</version>
    </dependency>
<!--  3)  mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.4</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.2</version>
    </dependency>
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>

    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.2</version>
    </dependency>

<!-- 4) servlet   -->
    <!-- servlet -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <scope>provided</scope>
      <version>3.1.0</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <scope>provided</scope>
      <version>2.0</version>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

<!--    5) mbg-->
    <dependency>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-core</artifactId>
      <version>1.4.0</version>
    </dependency>


<!--    6)log4j-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>

  在beans-datasoure.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:context="http://www.springframework.org/schema/context"
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        https://www.springframework.org/schema/tx/spring-tx.xsd
         http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        ">
	<!--1、加载数据库的配置信息 -->
	<context:property-placeholder
		location="classpath:jdbc.properties" />
	<!--2、datasource数据源 -->
	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${driver}" />
		<property name="url" value="${url}" />
		<property name="username" value="${uName}" />
		<property name="password" value="${password}" />
	</bean>
	<!-- 3、sqlSessionFactory -->
	<!-- 3、sqlSessionFactory -->
	<bean id="sqlSessionFactory"
		  class="org.mybatis.spring.SqlSessionFactoryBean">
		<!--分页-->

		<!-- 别名 -->
		<property name="typeAliasesPackage"  value="cc.entity"></property>

		<!-- mapper  XML映射 -->
		<property name="mapperLocations"  value="classpath*:cc.mapper/*Mapper.xml"></property>

		<!-- 数据源 -->
		<property name="dataSource" ref="dataSource"></property>

		<property name="plugins">
			<array>
				<bean class="com.github.pagehelper.PageInterceptor">
					<!-- 这里的几个配置主要演示如何使用,如果不理解,一定要去掉下面的配置 -->
					<property name="properties">
						<value>
							helperDialect=mysql
							reasonable=true
							supportMethodsArguments=true
							params=count=countSql
							autoRuntimeDialect=true
						</value>

					</property>

				</bean>
			</array>
		</property>

	</bean>

	<!--4、mapper接口的位置 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="cc.mapper"></property>
	</bean>
</beans>

  加入beans.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:context="http://www.springframework.org/schema/context"
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        https://www.springframework.org/schema/tx/spring-tx.xsd
         http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        ">


	<!-- 1、注解扫描 -->
	<!-- 2、datasource:mybatis -->
	<import resource="beans-datasource.xml"/>

</beans>

  加入spring-mvc.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:p="http://www.springframework.org/schema/p"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd
        ">
	<!-- 开启注解扫描  .** 所有所有包以及子包-->
	<context:component-scan base-package="cc.**"/>

	<!-- 1.处理器映射器 -->
	<!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>-->
	<!-- 2.处理器适配器 -->
	<!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>-->
	<!-- 3.试图解析器 -->
	<mvc:annotation-driven/>
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 解析jstl标签 -->
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<!-- 动态页面的前缀 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<!-- 动态页面的后缀 -->
		<property name="suffix" value=".jsp" />
	</bean>
</beans>

  使用generator.xml生成mapper和实体类

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <context id="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/t142" userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
            connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
            userId="yycg"
            password="yycg">
        </jdbcConnection> -->

        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
            NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成PO类的位置 -->
        <javaModelGenerator targetPackage="pojo"
                            targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="cc.mapper"
                         targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="cc.mapper"
                             targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
         <!--指定数据库表-->
        <table tableName="edoc_category"
               domainObjectName="Edoc_category"
               enableCountByExample="true"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               enableUpdateByExample="false"></table>

        <table tableName="edoc_entry"
               domainObjectName="Edoc_entry"
               enableCountByExample="true"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               enableUpdateByExample="false"></table>

        <!--<table tableName="test" domainObjectName="Test" enableCountByExample="false" enableDeleteByExample="false"-->
        <!--enableSelectByExample="false" enableUpdateByExample="false"></table>-->

    </context>
</generatorConfiguration>

  建立service和实现类

package cc.service;

import cc.entity.Edoc_entry;

import java.util.List;

public interface Edoc_entryService {

    /**
     *
     * @Title: list  
        * @Description: 获取所有用户的所有信息
        * @param @return
        * @return List<Users>
        * @throws
     */
    List<Edoc_entry> list();

    Edoc_entry selectById(int id);

    int update(Edoc_entry edoc_entry);
    /*
    * 添加用户
    * */
    int save(Edoc_entry edoc_entry);

    /*
* 删除数据
* */
    int delete(int id);


    List<Edoc_entry> findEntryByCate(int cateId);
}

  

package cc.service;

import cc.entity.Edoc_category;

import java.util.List;

public interface Edoc_categoryService {

    List<Edoc_category> list();

}

  

package cc.service.impl;

import cc.entity.Edoc_categoryExample;
import cc.entity.Edoc_entry;
import cc.entity.Edoc_entryExample;
import cc.mapper.Edoc_entryMapper;
import cc.service.Edoc_entryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class Edoc_entryServiceImpl implements Edoc_entryService {

    @Autowired
    private Edoc_entryMapper edoc_entryMapper;

    @Override
    public List<Edoc_entry> list() {
        return edoc_entryMapper.selectByExample(null);
    }

    @Override
    public Edoc_entry selectById(int id) {
        return edoc_entryMapper.selectByPrimaryKey(id);
    }

    @Override
    public int update(Edoc_entry edoc_entry) {
        return edoc_entryMapper.updateByPrimaryKey(edoc_entry);
    }

    @Override
    public int save(Edoc_entry edoc_entry) {
        return edoc_entryMapper.insert(edoc_entry);
    }

    @Override
    public int delete(int id) {
        return edoc_entryMapper.deleteByPrimaryKey(id);
    }

    @Override
    public List<Edoc_entry> findEntryByCate(int cateId) {
        //1.构建Example
        Edoc_entryExample example = new Edoc_entryExample();
        //2.根据example构建criteria(条件对象)
        Edoc_entryExample.Criteria criteria = example.createCriteria();
        //3.设置条件 :categoryId=3
        criteria.andCategoryidEqualTo(cateId);

        return edoc_entryMapper.selectByExample(example);
    }
}

  

package cc.service.impl;

import cc.entity.Edoc_category;
import cc.mapper.Edoc_categoryMapper;
import cc.service.Edoc_categoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class Edoc_categoryServiceImpl implements Edoc_categoryService{

    @Autowired
    private Edoc_categoryMapper edoc_categoryMapper;

    @Override
    public List<Edoc_category> list() {
        return edoc_categoryMapper.selectByExample(null);
    }
}

  Mapper文件中,加入查询集合的方法

package cc.mapper;

import cc.entity.Edoc_entry;
import cc.entity.Edoc_entryExample;

import java.util.List;

public interface Edoc_entryMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Edoc_entry record);

    int insertSelective(Edoc_entry record);

    Edoc_entry selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Edoc_entry record);

    int updateByPrimaryKey(Edoc_entry record);

    List<Edoc_entry> selectByExample(Edoc_entryExample example);
}

  

package cc.mapper;


import cc.entity.Edoc_category;
import cc.entity.Edoc_categoryExample;

import java.util.List;

public interface Edoc_categoryMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Edoc_category record);

    int insertSelective(Edoc_category record);

    Edoc_category selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Edoc_category record);

    int updateByPrimaryKey(Edoc_category record);

    List<Edoc_category> selectByExample(Edoc_categoryExample example);
}

  并修改mapper.xml

<select id="selectByExample" parameterType="cc.entity.Edoc_entryExample" resultMap="BaseResultMap">
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="Base_Column_List" />
    from edoc_entry
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>

  

<select id="selectByExample" parameterType="cc.entity.Edoc_categoryExample" resultMap="BaseResultMap">
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="Base_Column_List" />
    from edoc_category
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>

  写入Controller

package cc.web;


import cc.entity.Edoc_category;
import cc.entity.Edoc_entry;
import cc.service.Edoc_categoryService;
import cc.service.Edoc_entryService;
import com.github.pagehelper.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping("/edoc_entry")
public class Edoc_entryController {

    @Autowired
    private Edoc_entryService edoc_entryService;

    @Autowired
    private Edoc_categoryService edoc_categoryService;

    @ModelAttribute(value = "categories")
    public List<Edoc_category> getCategories(){
        List<Edoc_category> categories = edoc_categoryService.list();
        return categories;
    }

    @RequestMapping(value = "/list")
    public ModelAndView list() {

        //    public ModelAndView list() {
        ModelAndView mv = new ModelAndView();
        //1.调用用户的service层的方法获取所有用户所有数据
        List<Edoc_entry> edoc_entries = edoc_entryService.list();

        //2.将数据绑定mv上
        mv.addObject("edoc_entries", edoc_entries);

        //3.设置视图
        mv.setViewName("edoc_entry/list");
        //4.放回mv
        return mv;
    }

    @RequestMapping("/to_edit")
    public ModelAndView toUpdate(int id) {
        System.out.println("====进入toUpdate===id=>" + id);
        ModelAndView mv = new ModelAndView();
        //1.查询该用户的所有信息  web--servcice-maper-数据
        Edoc_entry edoc_entry = edoc_entryService.selectById(id);
        //2.将该用户数据绑定到mv
        mv.addObject("edoc_entry", edoc_entry);
        //3.将修改页面的jsp名称绑定到mv中
        mv.setViewName("edoc_entry/edit");
        //4.返回mv
        return mv;
    }

    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public ModelAndView update(Edoc_entry edoc_entry) {
        System.out.println("====进入update===user=" + edoc_entry);
        ModelAndView mv = new ModelAndView();
        //1.调用service更新用户信息
        int result = edoc_entryService.update(edoc_entry);
        //2.绑定视图
        if (result > 0) {//更新成功
            //重定向 ,edoc_entry/list的映射的list()方法,再由list()跳转到edoc_entry/list.jsp
            mv.setViewName("redirect:../edoc_entry/list");
        } else {//更新失败

        }
        //3.返回mv
        return mv;
    }

    @RequestMapping("/to_add")
    public String toAdd() {

        return "edoc_entry/add";
    }

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String add(Edoc_entry edoc_entry) {
        System.out.println("====进入add===edoc_entry=" + edoc_entry);
        //1.调用service添加用户信息方法
        int result = edoc_entryService.save(edoc_entry);
        //2.绑定视图
        if (result > 0) {//更新成功
            //重定向 ,edoc_entry/list的映射的list()方法,再由list()跳转到edoc_entry/list.jsp
            return "redirect:../edoc_entry/list";
        } else {//更新失败
            return "error";
        }
    }

    @RequestMapping("/delete")
    public String delete(@RequestParam("tid") int tid) {
        System.out.println("====进入delete===userId=" + tid);
        //1.调用service添加用户信息方法
        int result = edoc_entryService.delete(tid);
        //2.绑定视图
        if (result > 0) {//更新成功
            //重定向 ,user/list的映射的list()方法,再由list()跳转到user/list.jsp
            return "redirect:../edoc_entry/list";
        } else {//更新失败
            return "error";
        }
    }

    //根据分类id获取对应的所有电子文档
    @RequestMapping("/entrys")
    public String entrysByCate(Model model , int cateId){
        //1.调用service获取该分类的电子文档
        List<Edoc_entry> edoc_entries = edoc_entryService.findEntryByCate(cateId);
        //2.绑定到model
        model.addAttribute("edoc_entries",edoc_entries);
        //3.跳转到页面
        return "edoc_entry/template";

    }

}

  最后将jsp页面写好

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<%@taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/edoc_entry/add" method="post">
    <table border="1" align="center" width="50%" height="100px">
        <tr>
            <th>文档类型</th>
            <th>文档名称</th>
            <th>文档摘要</th>
            <th>上传人</th>
            <th>上传人时间</th>
        </tr>
        <tr align="center">

        <tr align="center">
            <td><div style="width:400px;margin: 0px auto;">

                <p>
                    <select name="categoryid">
                        <c:forEach items="${categories}" var="categories1">
                            <option value="${categories1.id}">${categories1.name}</option>
                        </c:forEach>
                    </select>
                </p>
            </div></td>
            <td><input type="text" name="title"/> </td>
            <td><input type="text" name="summary"/> </td>
            <td><input type="text" name="uploaduser"/> </td>
            <td>
                <!-- html5 中新增的标签:日期标签 -->
                <input type="date" name="createdate"
                       value="<fmt:formatDate value='' pattern='yyyy-MM-dd'/>"/>
            </td>
        </tr>
        </tr>
        <tr>
            <td colspan="4" align="center">
                <input type="submit" value="增加"/>
            </td>
        </tr>
    </table>
</form>
</body>
</html>

  

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jstl/fmt_rt"  prefix="fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 <form action="${pageContext.request.contextPath}/edoc_entry/update" method="post">
    <table border="1" align="center" width="50%"  height="100px">
        <tr>
            <th>文档编号</th>
            <th>文档名称</th>
            <th>文档摘要</th>
            <th>上传人</th>
            <th>上传人时间</th>
        </tr>
            <tr align="center">
                <td><input value="${edoc_entry.id}" name="id" readonly="readonly"/></td>
                 <td><input type="text" name="title" value="${edoc_entry.title }"/> </td>
                 <td><input type="text" name="summary" value="${edoc_entry.summary }"/> </td>
                 <td><input type="text" name="uploaduser" value="${edoc_entry.uploaduser }"/> </td>
                <td>
                    <!-- html5 中新增的标签:日期标签 -->
                    <input type="date" name="createdate"
                    value="<fmt:formatDate value='${edoc_entry.createdate}' pattern='yyyy-MM-dd'/>"/>
                </td>
            </tr>
            <tr>
              <td colspan="5" align="center">
                    <input type="submit" value="更新"/>
                </td>
            </tr>
    </table>
    </form>
</body>
</html>

  

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/12/23 0023
  Time: 11:13
  To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<%@page isELIgnored="false" %>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
<html>
<head>
    <title>Title</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>

    <script type="text/javascript">

        $(function(){
            $("#searchBtn").click(function(){
                // alert(1);
                //1.获取用户选择的分类
                var cateId = $("#name1").val();
                //2.根据id获取所有分类电子文档
                $.ajax({
                    type: "GET",
                    url: "http://localhost:8080/edoc_entry/entrys",
                    data: "cateId="+cateId,
                    success: function(bookList){
                        //alert( "Data Saved: " + bookList );
                        $("#book_list").html(bookList);
                    }
                });

            });
        })

    </script>

</head>
<body>
<div style="width:400px;margin: 0px auto;">

    <p>文档分类
        <select id="name1">
            <c:forEach items="${categories}" var="categories1">
                <option value="${categories1.id}">${categories1.name}</option>
            </c:forEach>
        </select>
        <button id="searchBtn">查询</button>
    </p>
</div>

<%--<form action="${pageContext.request. contextPath}/user/delBatch">--%>
<table width="80%" border="1">
    <thead>
    <tr>
        <%--<th><input type="checkbox" id="totalCheck" /> </th>--%>
        <th>文档编号</th>
        <th>文档名称</th>
        <th>文档摘要</th>
        <th>上传人</th>
        <th>上传人时间</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody id="book_list">
    <c:forEach items="${edoc_entries}" var="entries">
        <tr>
            <th>${entries.id}</th>
            <th>${entries.title}</th>
            <th>${entries.summary }</th>
            <th>${entries.uploaduser}</th>
            <th><fmt:formatDate value='${entries.createdate}' pattern='yyyy-MM-dd'/></th>
            <th>
                <a href="${pageContext.request. contextPath}/edoc_entry/to_edit?id=${entries.id}">修改</a>

                <a href="${pageContext.request. contextPath}/edoc_entry/to_add">增加</a>

                <a href="javascript:doDel('http://localhost:8080/edoc_entry/delete?tid=${entries.id}')">删除</a>

                    <%--<a href="javascript:remove('http://localhost:8080/user/delete/${user.id}')">删除(rest)</a>--%>
            </th>
        </tr>
    </c:forEach>
    </tbody>
</table>
<%--</form>--%>
<script type="text/javascript">

    function doDel(url) {

        if (confirm("确定删除吗?")) {

            location.href = url;

        }
    }


</script>

</body>
</html>

  

<%--
  Created by IntelliJ IDEA.
  User: mr.chan
  Date: 2020-12-24
  Time: 14:30
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
<html>
<head>
    <title>异步加载模板</title>
</head>
<body>

<c:forEach items="${edoc_entries}" var="entries">
    <tr>
        <th>${entries.id}</th>
        <th>${entries.title}</th>
        <th>${entries.summary }</th>
        <th>${entries.uploaduser}</th>
        <th><fmt:formatDate value='${entries.createdate}' pattern='yyyy-MM-dd'/></th>
        <th>
            <a href="${pageContext.request. contextPath}/edoc_entry/to_edit?id=${entries.id}">修改</a>

            <a href="${pageContext.request. contextPath}/edoc_entry/to_add">增加</a>

            <a href="javascript:doDel('http://localhost:8080/edoc_entry/delete?tid=${entries.id}')">删除</a>

                <%--<a href="javascript:remove('http://localhost:8080/user/delete/${user.id}')">删除(rest)</a>--%>
        </th>
    </tr>
</c:forEach>

</body>
</html>

  

注意:web.xml文件是最开始就执行的,所以要记得写

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">

  <!--一、spring的ioc容器配置 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:beans.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 三、spring的编码过滤器 -->
  <filter>
    <filter-name>CharacterEncodingFilter</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>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- 二、中央处理器(DispatcherServlet):映射器、适配器、视图解析器 -->
  <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>


  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

</web-app>

  还要,实体类里面有Date类型的要加入注释

 @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date createdate;

  并加入DateHandlerMethodArgumentResolver和MyDate接口

package cc.annotation;

import java.lang.annotation.*;

//该注解只能在哪里使用  (方法参数上)  
//Type注解只能使用在类上  
//Method注解只能能用方法上
//PARAMETER 只能用在方法参数上
@Target(ElementType.PARAMETER)
//运行策略 (一般RUNTIME)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyDate {

    String[] params() default ""; /*从网页中获取到的日期绑定哪个参数属性上*/

    String pattern() default "yyyy-MM-dd HH:mm:ss";/*默认的日期格式*/

}

  

package cc.annotation.support;

import cc.annotation.MyDate;
import org.springframework.beans.BeanUtils;
import org.springframework.core.MethodParameter;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

import javax.servlet.http.HttpServletRequest;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.text.SimpleDateFormat;


/**
 *  jsp(表单---string)==========>servlet(request.getParameter()--手动将jsp获取的string实体类中属性参数类型)
    * @ClassName: DateHandlerMethodArgumentResolver  
    * @Description: TODO  
    * @author 新梦想IT学院.陈超
    * @date 2020年12月22日  
    *    
 */
public class DateHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
    private String[] params;  /*属性*/
    private String pattern;   /*日期的格式*/

    /**
     * MethodParameter:controller的方法参数对象
     */
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        //1、判断controller方法上是否有MyDate注解
        boolean hasParameterAnnotation = parameter.hasParameterAnnotation(MyDate.class);
        if (!hasParameterAnnotation) {
            //不会进入下面的resolveArgument方法进行参数的解析
            return false;
        }
        //2、获取Date注解对象
        MyDate parameterAnnotations = parameter.getParameterAnnotation(MyDate.class);
        //3、获取Date注解的params参数
        String[] parameters = parameterAnnotations.params();
        if (!StringUtils.isEmpty(parameters)) {
            params = parameters;
            //4.获取Date注解的pattern参数
            pattern = parameterAnnotations.pattern();
          //进入下面的resolveArgument方法进行参数的解析
            return true;
        }
        return false;
    }

    @Override
    public Object resolveArgument(MethodParameter methodParam, ModelAndViewContainer mavContainer,
            NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        //1.获取controller方法参数Users user的类型对象
        Object object = BeanUtils.instantiateClass(methodParam.getParameterType());
        //2.获取参数类型对象的类信息(Users类的属性和方法)
        BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass());
        //3.获取请求对象Request
        HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
         //4.获取Users类类型对象的所有属性描述(获取Users类的所有属性)
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            //5.得到每个属性的名字(Users类的属性名),并根据属性名称得到请求参数的值
            String value = request.getParameter(propertyDescriptor.getName());
            //6.判断非空
            if (!StringUtils.isEmpty(value)) {
                //5.得到属性的set方法
                Method writeMethod = propertyDescriptor.getWriteMethod();
                //6.如果set方法为非公有方法,暴力破解
                if (!Modifier.isPublic(writeMethod.getModifiers())) {
                    writeMethod.setAccessible(true);
                }
                //7.判断属性名是否为Date指定的params值,如果是params指定值 则进行日期转换
                if (propertyDescriptor.getName().equals(params[0])) {//日期属性
                    SimpleDateFormat sdf = new SimpleDateFormat(this.pattern);
                    java.util.Date date = sdf.parse(value);
                    //调用setBirthday(date)
                    writeMethod.invoke(object, date);
                } else {//非日期的属性
                    //属性类型为Integer
                    if(propertyDescriptor.getPropertyType().equals(Integer.class)) {
                        writeMethod.invoke(object, Integer.parseInt(value));
                     //属性类型为字符串
                    }else {
                        writeMethod.invoke(object, value);
                    }
                }
            }
        }
        return object;
    }
}

  

posted on 2020-12-24 20:24  qiuxuhui  阅读(194)  评论(0编辑  收藏  举报