【问题标题】:Spring MVC + Hibernate + JSPSpring MVC + Hibernate + JSP
【发布时间】:2014-08-05 20:26:55
【问题描述】:

我是使用这些工具的新手,所以您可能会觉得这很愚蠢。

我在尝试访问我的 web 应用程序时遇到了这个错误(我应该在我的数据库“用户”表中显示每个用户。

HTTP ERROR 500

Problem accessing /maven-archetype-webapp/index. Reason:

    Neither BindingResult nor plain target object for bean name 'contact' available as request attribute
Caused by:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'contact' available as request attribute
    at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
    at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
    at org.springframework.web.servlet.tags.form.LabelTag.autogenerateFor(LabelTag.java:130)
    at org.springframework.web.servlet.tags.form.LabelTag.resolveFor(LabelTag.java:120)
    at org.springframework.web.servlet.tags.form.LabelTag.writeTagContent(LabelTag.java:90)
    at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84)
    at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)
    at org.apache.jsp.WEB_002dINF.jsp.usuario_jsp._jspx_meth_form_label_0(org.apache.jsp.WEB_002dINF.jsp.usuario_jsp:299)
    at org.apache.jsp.WEB_002dINF.jsp.usuario_jsp._jspx_meth_form_form_1(org.apache.jsp.WEB_002dINF.jsp.usuario_jsp:222)
    at org.apache.jsp.WEB_002dINF.jsp.usuario_jsp._jspService(org.apache.jsp.WEB_002dINF.jsp.usuario_jsp:106)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:266)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

所以我将向您发送我的控制器、我的 JSP 和我的服务实现。

UsuarioController.java

package org.maven.archetypes.Project.controller;


import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.maven.archetypes.Project.form.Usuario;
import org.maven.archetypes.Project.service.UsuarioService;


@Controller
public class UsuarioController {

    @Autowired
     private UsuarioService usuarioService;
    @RequestMapping("/index")
     public String listUsers(Map<String, Object> map) {
            map.put("usuario", new Usuario());
            map.put("usuarioList", usuarioService.listUsuario());
            return "usuario";
     } 


    @RequestMapping(value = "/add", method = RequestMethod.POST)
     public String addUsuario(@ModelAttribute("user")
        Usuario user, BindingResult result) {
        usuarioService.addUsuario(user);
        return "redirect:/index";
     }

    @RequestMapping("/delete/{email}")
     public String deleteUsuario(@PathVariable("email")
     String email) {
            usuarioService.removeUsuario(email);
            return "redirect:/index";
     }

}

Usuario.jsp

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
 <title>Spring 3 MVC Series - Contact Manager</title>
</head>
<body>
<!-- 

<h3>Usuarios</h3>
<c:if test="${!empty usuarioList}">
<table class="data">
<tr>
 <th><spring:message code="label.firstname"/></th>
 <th><spring:message code="label.email"/></th>
 <th>&nbsp;</th>
</tr>
<c:forEach items="${usuarioList}" var="usuario">
 <tr>
 <td>${usuario.lastname}, ${usuario.firstname} </td>
 <td>${usuario.email}</td>
 <td><a href="delete/${usuario.email}">Eliminar</a></td>
 </tr>
</c:forEach>
</table>
</c:if> 

</body>
</html>

UsuarioServiceImpl.java(接口UsuarioService.java的实现)

@Service
public class UsuarioServiceImpl implements UsuarioService {

     @Autowired
     private UsuarioDAO UsuarioDAO;

     @Transactional
     public void addUsuario(Usuario user) {
     UsuarioDAO.addUsuario(user);
     }

     @Transactional
     public List<Usuario> listUsuario() {

     return UsuarioDAO.listUsuario();
     }

     @Transactional
     public void removeUsuario(String email) {
     UsuarioDAO.removeUsuario(email);
     }  

}

我不知道是否有必要继续使用 DAO ...问题是错误名称为“联系人”,而我什至根本不使用该名称(我使用“Usuario” )。是的,在你问之前,我确实替换了一些带有“联系人”一词的互联网代码,但我将它们全部替换为我的代码。所以也许这造成了混乱,但我现在真的迷路了。希望您能够帮助我。如果有什么你不明白的,请不要犹豫。

非常感谢!

【问题讨论】:

  • 我认为你已经搞砸了你说你从一些在线教程中获取的部署代码。我猜你在你的服务器中部署了那场战争,你在代码之上进行了更改并尝试再次重新部署.所以我要说的是删除已经部署的战争,重新启动你的服务器。再次进行干净的 Maven 构建并重新部署并检查
  • 很抱歉,如何删除已经部署的战争? (我告诉过你我是一个真正的新手)。
  • 如果您使用的是 Tomcat,请转到 /webapps/ 文件夹并从谷歌那里删除您部署的战争,以防您遇到问题。如果您使用 weblogic 应用服务器打开 weblogic 控制台,请转到部署您的战争的部署部分并卸载它。你也可以用谷歌搜索它是如何完成的。在做这一切之前停止你的服务器(weblogic不需要)。
  • 我试过了,但没有任何效果。我正在使用 Jetty,jetty_home 的 webapp 目录中没有任何内容。我在系统中的 tmp 文件夹上搜索了一些东西,但没有任何线索......谷歌搜索它并没有。我现在真的处于边缘。我什至做了一个全新的项目,使用与旧项目相同的代码。同样的错误。
  • 不确定在 Jetty 中如何做到这一点,但有办法。但我认为最后一个选项是检查项目中的任何地方,我的意思是 xml 文件、属性文件、.java 文件,如果你能找到联系方式,可能是你在某个地方错过了它。兄弟,我只能坐在这里帮忙了,因为我看不到你的代码、你在做什么以及你是如何运行它的。

标签: java spring hibernate model-view-controller


【解决方案1】:

您只是将对象放入地图中。您需要将对象放入 http 请求中。 Spring 具有执行此操作的模型对象 ModelModelAndView,如下所示:-

<code>
@RequestMapping("/index")
     public String listUsers(Model model) {
            model.addAttribute("usuario", new Usuario());
            model.addAttribute("usuarioList", usuarioService.listUsuario());
            return "usuario";
     }

</code> 

<code>
@RequestMapping("/index")
     public ModelAndView listUsers() {
           ModelAndView mav = new ModelAndView("usuario");
            mav.addObject("usuario", new Usuario());
            mav.addObject("usuarioList", usuarioService.listUsuario());
            return mav;
     }
 </code>

【讨论】:

  • 但是那些mav.put或model.put甚至没有在Model和ModelandView对象类型中定义。
  • 对不起我的错误。我已经用正确的方法更新了答案。
  • 好的,谢谢您的回答,但没有帮助。同样的问题。请注意,错误是关于一个甚至不存在的模型,所以它一定是 Jetty 中缓存的战争文件或其他东西的问题,可能是在我更改它之前具有模型名称“联系人”的旧部署战争。下面有人说,但我仍然没有解决方案:/
  • 你能把你的web.xml和spring配置文件贴出来吗?
  • 我已经解决了。实际上我没有,但我放弃了 Jetty 并开始使用 Tomcat,这对我来说明显更好。谢谢大家:)
【解决方案2】:

我在这里可以建议您删除准备构建的目标文件夹并重新创建构建和战争然后运行,如果问题仍然存在,请让我们知道必要的文件。谢谢

【讨论】:

  • 我按照你说的做了,但问题仍然存在。
  • 你可以删除你服务器中的缓存文件吗,比如说在tomcat的工作文件夹,临时文件夹中,然后再试一次
  • 没有帮助。不知道是不是我做错了,但是我删除了我在 Jetty_Home 中可以找到的所有缓存。清理 maven 项目并重新构建它。事实上,我还用相同的代码创建了一个全新的项目。总是同样的错误。 “联系人”不断妨碍您:/
猜你喜欢
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
相关资源
最近更新 更多