Содержимое динамического блока выбора не отображается в заголовке при использовании Tiles2 с SpringMVC - PullRequest
0 голосов
/ 27 марта 2012

Привет! Я использую SpringMVC с плитками, и у меня возникла проблема с отображением части заголовка моей страницы, содержащей динамически построенное поле выбора.

У меня есть файл конфигурации плитки, который выглядит следующим образом:

<!-- Default Main Template -->
<definition name=".mainTemplate" template="/WEB-INF/jsp/layout.jsp">
    <put-attribute name="title" value="TouchPoint.com" type="string" />
    <put-attribute name="header" value="/WEB-INF/jsp/header.jsp" />
    <put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp" />
    <put-attribute name="body" value="/WEB-INF/jsp/blank.jsp" />
</definition>

<definition name="mySubscriptions" extends=".mainTemplate">
    <put-attribute name="body" value="/WEB-INF/jsp/mySubscriptions.jsp" />
</definition>

<definition name="addSubscription" extends=".mainTemplate">
    <put-attribute name="body" value="/WEB-INF/jsp/addSubscription.jsp" />
</definition>

layout.jsp выглядит так:

<%@taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type"    content="text/html; charset=iso-8859-1" />
        <meta name='keywords' content="GoAd Ltd ...................." />
        <meta name='description' content="GoAd Ltd..............................................." />
        <link rel="stylesheet" type="text/css" href="resources/css/header.css" />
        <link rel="stylesheet" type="text/css" href="resources/css/common.css" />
        <link rel="stylesheet" type="text/css" href="resources/css/footer.css" />
        <script language="javascript" type="text/javascript" src="/resources/js/common.js"></script>
        <title><tiles:insertAttribute name="title" ignore="true" /></title>
    </head>
    <body>
        <table cellpadding="2" cellspacing="2" align="center">
            <tr>
                <td height="30"><tiles:insertAttribute name="header" /></td>
            </tr>
            <tr>
                <td height="300" ><tiles:insertAttribute name="body" /></td>
            </tr>
            <tr>
                <td height="30"><tiles:insertAttribute name="footer" /></td>
            </tr>
        </table>
    </body>
</html> 

header.jsp выглядит так:

<div class="header0">
    <div style="overflow:hidden;">
        <div class="header1">
            <img src="resources/images/logo.jpg" style="padding:5px" alt="LOGO" />
        </div>
        <div class="header2">
            <div class="header3">
                <div class="header4">
                    <span class="header7">
                        <select name="topic" id="topicSelect" style="width:375px">
                            <c:forEach items="${topicList}" var="topic">
                                <option value="${topic.id}">${topic.name}</option>
                            </c:forEach>
                        </select>
                    </span>
                    <a class="button" href="#" onclick="this.blur(); return false;"><span>Search</span></a>
                </div>
                <div class="header5">
                    <a href="" class="nav" class="nav">Advanced Search</a> 
                </div>
            </div>
            <div>
                <span class="header8"><a href="" class="nav">Home</a></span>
                <span class="header8"><a href="" class="nav">Add Advertisement</a></span>
                <span class="header8"><a href="" class="nav">Subscriptions /<br/>Advertisements</a></span>
                <span class="header8"><a href="" class="nav">Your Profile</a></span>
            </div>
        </div>
        <div class="header6">
            <span class="header9"><a href="" class="nav">Create Account</a></span>
            <span class="header9"> or </span>
            <span class="header9"><a href="" class="nav">Sign In</a></span>
        </div>
    </div>
    <div>
        <hr class="horizontalRule"></hr>
    </div>
</div>

А мой контроллер выглядит так:

package com.touchpoint.controller;

import com.touchpoint.form.Topic;
import com.touchpoint.service.TopicService;
import java.util.Map;
import java.util.List;

import org.slf4j.Logger;
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;

@Controller
public class TopicController {

    @Autowired
    private TopicService topicService;

    @RequestMapping("/mySubscriptions")
    public String listTopics(Map<String,Object> map){
        map.put("topic", new Topic());
        map.put("topicList", topicService.listTopic());

        System.out.println("--------------------------------------------->Received request to show mySubscriptions page");
        List<Topic> topics = topicService.listTopic();
        for(Topic topic : topics) {
            System.out.println("--------------------------------------------->topic: "+topic.getName());
        }
        return "mySubscriptions";
    }

    @RequestMapping("/addSubscription")
    public String getAddSubscriptionPage(){
        System.out.println("--------------------------------------------->Received request to show addSubscriptions page");

        return "addSubscription";
    }

    @RequestMapping(value="/add", method=RequestMethod.POST)
    public String addTopic(@ModelAttribute("topic")Topic topic, BindingResult result){
        topicService.addTopic(topic);
        return "redirect:/index";
    }

    @RequestMapping("/delete/{topicId}")
    public String deleteTopic(@PathVariable("topicId") Integer topicId){
        topicService.removeTopic(topicId);
        return "redirect:/index";
    }    
}

По какой-то причине мой блок выбора пуст при отображении страницы, хотя конфигурация Tiles, похоже, работает! До того, как я начал использовать плитки, я использовал простой тег include для включения моих заголовков, например:

Это работало нормально, и моя спальная коробка была заполнена в моем заголовке. С плитками перестал работать! У кого-нибудь есть идеи, почему?

Спасибо

Seán

1 Ответ

0 голосов
/ 29 марта 2012

вы можете проверить, изменив версию datshell.xml на 2.1, если это не так. А также использовать выражение put-атрибут вместо значения put-attribute.

Например, вы можете сослаться на Spring + Tiles2 - атрибут put из модели? .

...