Maison  >  Article  >  interface Web  >  Le backend d'utilisation de BootstrapTable utilise SpringMVC + Hibernate

Le backend d'utilisation de BootstrapTable utilise SpringMVC + Hibernate

巴扎黑
巴扎黑original
2017-09-07 12:01:002447parcourir

Cet article vise principalement à vous permettre de jouer facilement avec BootstrapTable. Le backend utilise SpringMVC+Hibernate, qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

C'est toujours le vieil adage, ce n'est pas comme. aussi bon que facile à retenir. Je me souviens qu'il y avait une pagination dans un projet de démonstration précédent, mais aucun plug-in n'a été utilisé. J'ai écrit à la main le processus de pagination, mais l'effet n'était pas très bon. Récemment, je suis entré en contact avec le plug-in BootstrapTable. le même style que Bootstrap. Parlons maintenant de la façon de l'utiliser.

Lorsque vous commencez, vous pouvez y insérer directement des données json, puis définir la méthode de pagination sur client'. Cependant, dans les projets généraux, l'arrière-plan est. utilisé pour la pagination, et il est impossible de tout faire en même temps. Des milliers de données ont été récupérées de la base de données. Sans parler du problème de trafic, le rendu côté client était également difficile. Lors du processus d'utilisation de la pagination back-end du serveur, j'ai également rencontré quelques problèmes. Je pense que la plupart des personnes qui entrent en contact avec BootstrapTable pour la première fois les rencontreront. Écrivez donc par la présente un exemple complet, qui devrait être continué à être amélioré plus tard, y compris les ajouts, les suppressions et les modifications.

D'accord, arrêtez de dire des bêtises et continuez avec le code.

Parlons d'abord de la structure du projet :

Le projet est construit en utilisant maven. Puisque la structure du projet n'est pas très compliquée, je l'ai fait. je ne le présenterai pas trop.
Regardez ensuite index.jsp


<%@ page contentType="text/html;charset=UTF-8"%> 
<html> 
 
<link rel="stylesheet" href="css/bootstrap.css" type="text/css" /> 
<link rel="stylesheet" href="css/bootstrap-table.css" type="text/css"> 
<script type="text/javascript" src="js/jquery-2.0.0.min.js"></script> 
<script type="text/javascript" src="js/bootstrap.js"></script> 
<script type="text/javascript" src="js/bootstrap-table.js"></script> 
<script type="text/javascript" src="js/bootstrap-table-zh-CN.js"></script> 
 
<body> 
  <p class="panel panel-default"> 
    <p class="panel-heading"> 
      <h3 class="panel-title text-center">Bootstrap-table样例演示</h3> 
    </p> 
    <p class="panel-body"> 
 
      <p id="toolbar" class="btn-group"> 
      <button id="btn_edit" type="button" class="btn btn-default"> 
        <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改 
      </button> 
      <button id="btn_delete" type="button" class="btn btn-default"> 
        <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除 
      </button> 
    </p> 
 
    <table data-toggle="table" id="table" data-height="400" 
      data-classes="table table-hover" data-striped="true" 
      data-pagination="true" data-side-pagination="server" 
      data-search="true" data-show-refresh="true" data-show-toggle="true" 
      data-show-columns="true" data-toolbar="#toolbar"> 
      <thead> 
        <tr> 
          <th data-field="state" data-checkbox=&#39;ture&#39;></th> 
          <th></th> 
          <th></th> 
          <th></th> 
          <th></th> 
        </tr> 
      </thead> 
    </table> 
  </p> 
  </p> 
 
 
</body> 
 
<script type="text/javascript"> 
  $("#superBtn").click(function() { 
    $.get("getPageInfo?limit=5&offset=0", function(data, status) { 
      alert(status); 
      alert(data.userList[0].name); 
    }); 
  }); 
   
  $(document).ready(function(){ 
    $("button[name=&#39;toggle&#39;]").height(20); 
    $("button[name=&#39;refresh&#39;]").height(20); 
  }); 
 
  function edit(id) { 
    alert(id); 
  } 
 
  $("#table") 
      .bootstrapTable( 
          { 
            url : "getPageInfo",  //数据请求路径 
            clickToSelect : true, //点击表格项即可选择 
            dataType : "json",  //后端数据传递类型 
            pageSize : 5, 
            pageList : [ 5, 10, 20 ], 
          // contentType : "application/x-www-form-urlencoded", 
            method : &#39;get&#39;,   //请求类型 
            dataField : "data", //很重要,这是后端返回的实体数据!          
            //是否显示详细视图和列表视图的切换按钮 
            queryParams : function(params) {//自定义参数,这里的参数是传给后台的,我这是是分页用的  
              return {//这里的params是table提供的  
                offset : params.offset,//从数据库第几条记录开始  
                limit : params.limit 
              //找多少条  
              }; 
            }, 
            responseHandler : function(res) { 
              //在ajax获取到数据,渲染表格之前,修改数据源 
              return res; 
            }, 
            columns : [ 
                { 
                  field : &#39;state&#39;, 
                }, 
                { 
                  field : &#39;id&#39;, 
                  title : &#39;ID&#39;, 
                  align : &#39;center&#39; 
                }, 
                { 
                  field : &#39;name&#39;, 
                  title : &#39;姓名&#39;, 
                  align : &#39;center&#39; 
                }, 
                { 
                  field : &#39;age&#39;, 
                  title : &#39;年龄&#39;, 
                  align : &#39;center&#39; 
                }, 
                { 
                  field : &#39;address&#39;, 
                  title : &#39;地址&#39;, 
                  align : &#39;center&#39; 
                }, 
                { 
                  title : &#39;操作&#39;, 
                  field : &#39;id&#39;, 
                  align : &#39;center&#39;, 
                  formatter : function(value, row, index) { 
                    var e = &#39;<a href="#" mce_href="#" onclick="edit(\&#39;&#39; 
                        + row.id + &#39;\&#39;)">编辑</a> &#39;; 
                    var d = &#39;<a href="#" mce_href="#" onclick="del(\&#39;&#39; 
                        + row.id + &#39;\&#39;)">删除</a> &#39;; 
                    return e + d; 
                  } 
 
                } ] 
          }); 
</script> 
</html>

Quelques points importants :

1. Importez les fichiers CSS et js nécessaires. et faites attention au problème de version, qui sera discuté plus tard

2. queryParams : il s'agit des données transmises par le front-end au back-end lorsque vous cliquez sur la pagination ou que vous chargez la table pour la première fois. Il y a deux données, à savoir limit et offset. limit représente le nombre d'enregistrements demandés, offset représente le décalage de l'enregistrement

3. dataField : représente les données de l'objet transmises par le backend, et le nom doit être le identique au nom de l'objet.

Regardons à nouveau le contrôleur :


package controller; 
 
import java.util.Map; 
 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 
 
import dao.UserDao; 
 
@Controller 
public class BootstrapTableController { 
 
  @RequestMapping("/getPageInfo") 
  public @ResponseBody Map<String,Object> getPageInfo(int limit,int offset) { 
    System.out.println("limit is:"+limit); 
    System.out.println("offset is:"+offset); 
    UserDao userDao = new UserDao(); 
    Map<String,Object> map = userDao.queryPageInfo(limit, offset); 
    return map; 
  } 
}

Le contrôleur reçoit les paramètres de limite et de décalage transmis depuis le front-end , puis sur la base de ces deux paramètres, appelez la méthode de couche dao pour obtenir les données. Regardez à nouveau UserDao :


package dao; 
 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.query.Query; 
 
import entity.User; 
 
public class UserDao { 
 
  private Session session; 
 
  private Transaction transaction; 
 
  public Session getSession() { 
    Configuration config = new Configuration().configure(); 
    SessionFactory sessionFactory = config.buildSessionFactory(); 
    Session session = sessionFactory.openSession(); 
    return session; 
  } 
 
  public Map<String, Object> queryPageInfo(int limit, int offset) { 
    String sql = "from User"; 
    Session session = this.getSession(); 
 
    Query query = session.createQuery(sql); 
    query.setFirstResult(offset); 
    query.setMaxResults(limit); 
    List<User> userList = query.list(); 
 
    String sql2 = "select count(*) from User"; 
    int totalRecord = Integer.parseInt(session.createQuery(sql2).uniqueResult().toString()); 
 
    Map<String, Object> map = new HashMap<String, Object>(); 
    map.put("total", totalRecord); 
    map.put("data", userList); 
    return map; 
  } 
}

userDao est également relativement simple. La clé est totale et les données sont les données à retourner à la réception. . Faites attention au nom correspondant à la réception, il vous suffit de renvoyer les données de l'entité et le nombre total d'enregistrements, et BootstrapTable fera le reste pour vous.
Ensuite, jetons un œil à l'utilisateur dans la couche d'entité


package entity; 
 
public class User { 
 
  private int id; 
   
  private String name; 
   
  private int age; 
   
  private String address; 
 
  public User() { 
    super(); 
  } 
 
  public User(int id,String name, int age, String address) { 
    super(); 
    this.id = id; 
    this.name = name; 
    this.age = age; 
    this.address = address; 
  } 
 
  public String getName() { 
    return name; 
  }   
 
  public int getId() { 
    return id; 
  } 
 
  public void setId(int id) { 
    this.id = id; 
  } 
 
  public void setName(String name) { 
    this.name = name; 
  } 
 
  public int getAge() { 
    return age; 
  } 
 
  public void setAge(int age) { 
    this.age = age; 
  } 
 
  public String getAddress() { 
    return address; 
  } 
 
  public void setAddress(String address) { 
    this.address = address; 
  } 
 
  @Override 
  public String toString() { 
    return "User [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]"; 
  } 
}

Il existe plusieurs fichiers de configuration, à savoir le fichier de configuration SpirngMVC et le web .xml et pom.xml, ce qui doit correspondre doit correspondre :

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:p="http://www.springframework.org/schema/p" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" 
 http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
 http://www.springframework.org/schema/util 
 http://www.springframework.org/schema/util/spring-util-4.3.xsd 
 http://www.springframework.org/schema/context  
 http://www.springframework.org/schema/context/spring-context-4.3.xsd 
 http://www.springframework.org/schema/mvc 
 http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> 
 
<!--   <mvc:annotation-driven/>  --> 
  <mvc:annotation-driven> 
    <mvc:message-converters> 
      <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> 
    </mvc:message-converters> 
  </mvc:annotation-driven> 
 
  <context:component-scan base-package="controller"/> 
  
  <!-- 这两个类用来启动基于Spring MVC的注解功能,将控制器与方法映射加入到容器中 --> 
  <bean 
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> 
  <bean 
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 
 
  <!-- 这个类用于Spring MVC视图解析 --> 
  <bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/pages/" /> 
    <property name="suffix" value=".jsp" /> 
  </bean> 
  
</beans>

web.xml :


<!DOCTYPE web-app PUBLIC 
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
 "http://java.sun.com/dtd/web-app_2_3.dtd" > 
 
<web-app> 
  <display-name>Archetype Created Web Application</display-name> 
 
  <servlet> 
    <servlet-name>SpringMVC</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
  </servlet> 
  <servlet-mapping> 
    <servlet-name>SpringMVC</servlet-name> 
    <url-pattern>/</url-pattern> 
  </servlet-mapping> 
 
  <servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>*.css</url-pattern> 
  </servlet-mapping> 
  <servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>*.js</url-pattern> 
  </servlet-mapping> 
  <servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>*.ttf</url-pattern> 
  </servlet-mapping> 
  <servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>*.woff</url-pattern> 
  </servlet-mapping> 
  <servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>*.woff2</url-pattern> 
  </servlet-mapping> 
 
</web-app>

pom.xml :


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
  <modelVersion>4.0.0</modelVersion> 
  <groupId>Demo</groupId> 
  <artifactId>BootstrapDemo</artifactId> 
  <packaging>war</packaging> 
  <version>0.0.1-SNAPSHOT</version> 
  <name>BootstrapDemo Maven Webapp</name> 
  <url>http://maven.apache.org</url> 
  <dependencies> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
    </dependency> 
    <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
      <scope>provided</scope> 
    </dependency> 
    <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>5.2.6.Final</version> 
    </dependency> 
 
    <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.41</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> 
    <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.3.10.RELEASE</version> 
    </dependency> 
    <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.8.9</version> 
    </dependency> 
    <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.8.9</version> 
    </dependency> 
      <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>2.8.9</version> 
    </dependency> 
  </dependencies> 
  <build> 
    <finalName>BootstrapDemo</finalName> 
  </build> 
</project>

Alors oubliez le premier niveau, c’est très simple. En gros, toutes les touches ont été affichées ici. Jetons un coup d'oeil à l'effet :

Je ne sais pas si vous avez remarqué qu'un bouton dans le coin supérieur droit est évidemment un cercle plus grand, ce n'est pas bon, en fait les deux boutons de gauche sont un cercle plus petit. J'ai cherché en ligne pendant longtemps, mais en gros, personne n'a rencontré un tel problème, je n'ai pas d'autre choix que de me forcer à le faire. utilisez un débogueur pour suivre ces deux éléments de bouton, et enfin utilisez jQuery pour modifier manuellement sa taille une fois la table chargée, puis cela fonctionne normalement.

Bien sûr, cela implique uniquement la vérification des données, ainsi que la suppression, l'ajout et la modification des données. Nous présenterons la mise en œuvre de celles-ci plus tard. En fait, la chose la plus importante est la vérification. le reste se mettra en place.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn