首页 > 解决方案 > 在spring mvc和hibernate中将数据从控制器发送到视图的问题

问题描述

我正在尝试学习spring mvc和hibernate,所以我正在做一个关于体育奥运会的CRUD。我的数据库中有两张表,一张名为 Player,另一张名为 Sport。

工具:Netbeans 8.0.2、GlassFish Server 4.1、Java EE 7 web、Spring web MVC 4.0.1、Hibernate 4.3.1

问题:在索引页面中,我需要显示注册球员的数量和注册运动的数量。我使用选择计数来执行此操作,并在我的控制器中尝试使用 get 方法将数据发送到索引,但 index.htm 中没有显示任何数据,似乎不服从控制器。但是可以在浏览器中看到索引页面。

调度程序-servlet.xml

   <?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

    <!--
    Most controllers will use the ControllerClassNameHandlerMapping above, but
    for the index controller we are using ParameterizableViewController, so we must
    define an explicit mapping for it.
    -->
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.htm">indexController</prop>
                <prop key="rdeporte.htm">homeController</prop>
                <prop key="rjugador.htm">homeController</prop>
                <prop key="ujugador.htm">homeController</prop>
                <prop key="udeporte.htm">homeController</prop>
                <prop key="borrardeporte.htm">homeController</prop> 
            </props>
        </property>
    </bean>

    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />

    <!--
    The index controller.
    -->
    <bean name="homeController" class="Controlador.HomeController"></bean>
    <bean name="indexController" class="org.springframework.web.servlet.mvc.ParameterizableViewController" p:viewName="index" />    
</beans>

索引.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>

<html lang="es">


      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
        <title>Welcome to Insert with Spring Web MVC project</title>
    </head>

    <body>
    <!--    <div class="container">-->
             <div class="row" style="background-color: rgba(0,0,255,.1)">
                 <div class="col-lg-2">
                     <div class="container">
                         <div class="row">
                         <div class="h-25 d-inline-block" style="text-align:center;font-size:24px;width:100%;height: 50%;background-color: rgba(0,0,255,.1)">OPTIONS</div>
                         </div>
                         <div class="row" style="width:100%;padding-top:15%;">

                         </div>
                         <div class="row">
                             <a href="rjugador.htm"><img style="width:100%;height:auto;" src="<c:url value="/resources/img/btnrp.png"/>" alt="Registration of participants"></a>
                         </div>
                         <div class="row">
                             <a href="rdeporte.htm"><img style="width:100%;height:auto;" src="<c:url value="/resources/img/btnrd.png"/>" alt="register new disciplines"></a>
                         </div>
                     </div>
                 </div>
                    <div class="col-lg-8">

                      <div class="card border-danger" style="width:100%;height:auto;">
                               <img class="card-img-top" style="width:100%;height:auto;" src="<c:url value="/resources/img/resSports.png"/>" alt="Card image cap">
                          <div class="card-header bg-danger">
                              <h4 style="font-size:auto;">Raccoon city Sports Olimpics</h4>
                          </div>
                      </div>
                    </div>
                 <div class="col-lg-2">

                 </div>
            </div>
    <!--    </div>-->
            <div class="container-fluid" style="text-align:center;">
                <h2>ESTADISTICS</h2>
            </div>


                    <div class="row">  
                        <div class="navItem" style="font-size:auto; text-align:center;">
                              <div class="card" style="width: 100%; float: ">
                                  <img class="card-img-top" src="<c:url value="/resources/img/cabecerap.png"/>" alt="Card image cap">
                                  <div class="card-body">
                                        <div class="card-text">   
                                            <p>Players:</p><c:out value="${ numPlayers }"/>
                                        </div>
                                  </div>
                              </div>
                        </div>


                        <div class="navItem" style="font-size:auto; text-align:center;">
                              <div class="card" style="width: 100%; float: ">
                                  <img class="card-img-top" src="<c:url value="/resources/img/cabecerad.png"/>" alt="Card image cap">
                                  <div class="card-body">
                                      <div class="card-text">   
                                            <p>Sports:</p>
                                      </div>
                                  </div>
                              </div>
                        </div>
                    </div>


                <div class="container-fluid">
                    <p>something</p>
                </div>
    </body>
</html>

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 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_3_1.xsd">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>redirect.jsp</welcome-file>
    </welcome-file-list>
</web-app>

package Controlador;
@Controller
public class HomeController {

        /* this controller does not want to work */
        @RequestMapping(value="index.htm", method = RequestMethod.GET)
        public ModelAndView index(){
            ModelAndView mav= new ModelAndView();
            Estadistics est=new Estadistics();
            mav.addObject("numPlayers",est.getNumPlayers());
            mav.setViewName("index");
            return mav;
        }

    @RequestMapping(value="rjugador.htm", method = RequestMethod.GET)
    public ModelAndView rjugador(){
     /***Other Controlers***/
       .......................
}
package Controlador;

public class Estadistics {

    public int getNumPlayers (){

        int c=queries("select count(j) from Player as j");

        return c;
    }

  public int queries(String hql) {

        int num=0;
        try
        {
            Configuration configuration = new Configuration().configure();
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
            applySettings(configuration.getProperties());
            SessionFactory session = configuration.buildSessionFactory(builder.build());

                Session ses;
                ses=session.openSession();


                Query q=ses.createQuery(hql);
                num = q.getFirstResult();


                ses.close();

        }catch(HibernateException ex){

        }
     return num;

    }    
}

查询有效 https://drive.google.com/open?id=13khiwcVJ2sS0qn49LAG4m3s00nlzVIBX

标签: javaspringhibernate

解决方案


您应该开始检查您的映射,看起来您的调度程序正在等待 .jsp,而您还没有。

你能分享你完整的JSP文件吗?

最好检查一下您的查询是否真的返回了一些东西。您可以添加一些日志来打印号码,然后再将其发送到您的视图。

看看这个例子:SimplerUrlHandlerMapping


推荐阅读