Привет! Я использую 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