首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用基本Spring3.0MVC示例加载瓷砖

无法使用基本Spring3.0MVC示例加载瓷砖
EN

Stack Overflow用户
提问于 2013-12-28 13:37:25
回答 1查看 650关注 0票数 0

我正在从春季行动第3版学习Spring

根据这本书中给出的例子,我正在使用Spring3.0MVC和Tiles-2来实现Spitter应用程序,使用Eclipse作为IDE,并将应用程序部署到Tomcat6.0服务器上。

当我试图使用URL(http://localhost:8081/SpringInAction3/spitter/spittles?spitter=test)访问应用程序的页面时,我只是收到一个错误信息:

Neither BindingResult nor plain target object for bean name 'spittle' available as request attribute

下面是我的tiles配置文件view.xml:

代码语言:javascript
复制
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
    <definition name="template" template="/WEB-INF/views/main_template.jsp">
        <put-attribute name="top"
            value="/WEB-INF/views/tiles/spittleForm.jsp" />
        <put-attribute name="side"
            value="/WEB-INF/views/tiles/signinsignup.jsp" />
    </definition>
    <definition name="home" extends="template">
        <put-attribute name="content" value="/WEB-INF/views/home.jsp" />
    </definition>

    <definition name="spittles/list" extends="template">
        <put-attribute name="content" value="/WEB-INF/views/spittles/list.jsp" />
    </definition>
</tiles-definitions>

Spring配置文件:

代码语言:javascript
复制
<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <mvc:resources mapping="resources/**" location="/resources/" />
    <mvc:annotation-driven />

    <context:component-scan base-package="com.habuma.spitter"/>

    <bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver" />

    <bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/views/views.xml</value>
            </list>
        </property>
    </bean>
</beans>

web.xml文件中的Sevlet映射:

代码语言:javascript
复制
<servlet>
    <servlet-name>spitter</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spitter</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

main_template.jsp页面:

代码语言:javascript
复制
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="t" uri="http://tiles.apache.org/tags-tiles" %>
<html>
  <head>
    <title>Spitter</title>
    <link href="<s:url value="/resources" />/css/spitter.css" 
          rel="stylesheet" 
          type="text/css" />
  </head>

  <body>
    <div id="container">
      <a href="<s:url value="/home" />"><img 
          src="<s:url value="/resources" />/images/spitter_logo_50.png" 
          border="0"/></a>
      <div id="top">
        <t:insertAttribute name="top" /> <!--<co id="co_tile_top" />-->
      </div>
      <div id="side">
        <t:insertAttribute name="side" /> <!--<co id="co_tile_side" />-->
      </div>
      <div id="content">
        <t:insertAttribute name="content" /> <!--<co id="co_tile_content" />-->
      </div>
    </div>
  </body>
</html>

我的主计长是:

代码语言:javascript
复制
@Controller
@RequestMapping("/spitter")
public class SpitterController {
    private final SpitterService spitterService;

    @Inject
    public SpitterController(SpitterService spitterService) {
        this.spitterService = spitterService;
    }

    @RequestMapping(value = "/spittles", method = GET)
    public String listSpittlesForSpitter(
            @RequestParam("spitter") String username, Model model) {
        Spitter spitter = spitterService.getSpitter(username);
        model.addAttribute(spitter);
        model.addAttribute(spitterService.getSpittlesForSpitter(username));
        return "spittles/list";
    }
}

我的list.jsp是:

代码语言:javascript
复制
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<div>
    <h2>Spittles for ${spitter.username}</h2>
    <table cellspacing="15">
        <c:forEach items="${spittleList}" var="spittle">
            <tr>
                <td><img
                    src="<s:url value= "/resources/images/spitter_avatar.png"/>"
                    width="48" height="48"/></td>
                <td><a
                    href="<s:url value= "/spitters/${spittle.spitter.username}"/>">
                    ${spittle.spitter.username}</a> <c:out
                        value="${spittle.text}" /><br /> <c:out value="${spittle.when}" /></td>
            </tr>
        </c:forEach>
    </table>
</div>

请告诉我我在哪里弄错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-28 14:05:42

您的JSP中的某个东西(可能是spittleForm.jsp未显示)正在尝试绑定到一个名为spittle的模型对象。但是,当向/spittles发出请求时,此模型对象不可用。

您可能最好确保/spittles的控制器映射添加必要的模型对象以满足表单绑定。

代码语言:javascript
复制
@RequestMapping(value = "/spittles", method = GET)
public String listSpittlesForSpitter(
        @RequestParam("spitter") String username, Model model) {
    Spitter spitter = spitterService.getSpitter(username);
    model.addAttribute(spitter);
    model.addAttribute(spitterService.getSpittlesForSpitter(username));

    model.addAttribute("spittle", new Spittle()); // Add an empty model 

    return "spittles/list";
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20815184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档