2013-07-01 44 views
0

如果控制器內我設置與瓷磚+ Spring MVC的使用表達式語言

model.addAttribute("page-title", "Home"); 

,我想有它在瓷磚laytou.jsp這樣的:

<title><tiles:getAsString name="page-title"/></title> 

我應該怎麼做?

  1. 寫一個編寫者?

    to preparer de put-attribute定義並不重要,所以看起來沒有任何意義。

  2. 只需添加一個<放屬性名稱= 「頁面標題」 值= 「$ {頁標題}」/ > 到定義是什麼?

    當我這樣做時,我只是得到「$ {page-title} - 我的網站」作爲輸出。 EL未被評估。

那麼請問,最好的做法是什麼,以及如何使它工作?

瓷磚 - defs.xml:

<tiles-definitions> 

    <definition name="baseLayout" template="/WEB-INF/pages/common/layout.jsp"> 
    <put-attribute name="website-title" value="My Website"/> 
    <put-attribute name="page-title" expression="Default Title"/> 
    <put-attribute name="header" value="/WEB-INF/pages/common/header.jsp"/> 
    <put-attribute name="body" value=""/> 
    <put-attribute name="footer" value="/WEB-INF/pages/common/footer.jsp"/> 
    </definition> 

    <definition name="*" extends="baseLayout"> 
     <put-attribute name="page-title" value="${page-title}"/> 
     <put-attribute name="body" value="/WEB-INF/pages/{1}.jsp"/> 
    </definition> 

</tiles-definitions> 

layout.jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> 
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
     <meta name="language" content="English" /> 
     <title><tiles:getAsString name="page-title"/> - <tiles:getAsString name="website-title"/></title> 
     <link rel="stylesheet" type="text/css" href="<c:url value="/resources/css/style.css" />" media="all"/> 
    </head> 

    <body> 

     <div id="container"> 

      <!-- header --> 
      <tiles:insertAttribute name="header"/> 

      <!-- main central container --> 
      <tiles:insertAttribute name="body"/> 

      <!-- footer --> 
      <tiles:insertAttribute name="footer"/> 

     </div> 

    </body> 
</html> 

homeController.java:

@Controller 
public class HomeController { 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public ModelAndView home(Locale locale, Model model) { 
     ModelAndView mav = new ModelAndView(); 
     mav.setViewName("home"); 
     model.addAttribute("page-title", "Home"); 
     return mav; 
    } 

} 

的servlet-context.xml中:

<beans:bean id="tilesviewResolver" class="org.springframework.web.servlet.view.tiles2.TilesViewResolver" p:order="0"/> 
<beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <beans:property name="definitions" value="/WEB-INF/tiles/tiles-defs.xml"/> 
</beans:bean> 

的pom.xml:

<!-- Tiles --> 
<dependency> 
    <groupId>org.apache.tiles</groupId> 
    <artifactId>tiles-jsp</artifactId> 
    <version>2.2.2</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency>  

<dependency> 
    <groupId>org.apache.tiles</groupId> 
    <artifactId>tiles-el</artifactId> 
    <version>2.2.2</version> 
</dependency> 

回答

2

只要使用純EL沒有瓷磚。模型屬性按要求放置在其名稱下作爲屬性(HttpServletRequest#getAttribute)。這是通過requestScope['page-title']訪問或者只是簡單地按屬性名稱本身:

<title><c:out value="${page-title}" /></title> 
<title>${page-title} - without HTML escaping provided by c:out</title> 

這有什麼好做瓷磚。使用模型/請求屬性時,不需要考慮Tiles。

1

Pavei是正確的,在你的用例中,它不是很明顯,你爲什麼需要將請求屬性放入tile屬性中。

如果你真的需要它作爲一個瓷磚屬性,那麼不喜歡它

<put-attribute name="page-title" expression="${page-title}"/> 
+0

這確實需要使用瓷磚3.有什麼我需要配置 –

1

我的英語很差。我的項目中沒有使用tiles2.x,我使用tiles3.x。如果你想使用表達式語言支持,首先你應該啓用CompleteAutoloadTilesContainerFactory。

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> 
    <property name="definitions"> 
     <list> 
      <value>/WEB-INF/tiles/tiles-defs.xml</value> 
     </list> 
    </property> 
    <!--enable CompleteAutoloadTilesContainerFactory --> 
    <property name="completeAutoload" value="true"></property> 
</bean> 

那麼你必須配置這樣的定義。

<definitions name="*" extends="baseLayout"> 
    <put-attribute name="page-title" expression="${page-title}" /> 
    <put-attribute name="body" value="/WEB-INF/pages/{1}.jsp" /> 
</definitions> 

瓷磚文件https://tiles.apache.org/framework/tutorial/advanced/el-support.html 祝你好運。