2012-06-24 61 views
2

我目前正在運行Spring + Apache Tiles web應用程序。 我需要展示一些示例代碼來解釋我的意圖。將全局變量傳遞給Spring + Apache Tiles

Apache的瓷磚配置:

<?xml version="1.0" encoding="UTF-8" ?> 
<!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="baseLayout" template="/WEB-INF/layouts/www_base.jsp" /> 

    <definition name="home" extends="baseLayout"> 
     <put-attribute name="body" value="/WEB-INF/views/home.jsp" /> 
    </definition> 

</tiles-definitions> 

實施例控制器:

@Controller 
public class ExampleController { 
    @RequestMapping("/index.html") 
    public String index(Map<String, Object> map) { 
     map.put("hello", "world"); 
     return "home"; 
    } 
} 

這將與home.jspbody顯示www_base.jsp。我可以在www_base.jsp以及home.jsp中使用變量${hello}

但我不想在每個控制器方法中設置hello,以便能夠在每個頁面上的www_base.jsp中使用它。

有沒有辦法爲www_base.jsp設置全局變量,例如:在ExampleController的構造函數中?

使用UPDATE 示例代碼的Map

@Controller 
@RequestMapping("/") 
public class BlogController { 
    @ModelAttribute 
    public void addGlobalAttr(Map<String, Object> map) { 
     map.put("fooone", "foo1"); 
    } 

    @RequestMapping("/index.html") 
    public String posts(Map<String, Object> map) { 
     map.put("foothree", "foo3"); 
     return "posts"; 
    } 
} 

回答

2

使用method annotated with @ModelAttribute

的@ModelAttribute上的方法指示方法的目的是 添加一個或多個模型屬性。這些方法支持與@RequestMapping方法相同的 參數類型,但不能將 直接映射到請求。相反,在@RequestMapping方法之前,在同一個 控制器中調用控制器 中的@ModelAttribute方法。

@ModelAttribute方法可用於填充與常用 所需屬性的模型例如以填補狀態或與 寵物類型下拉,或爲了檢索像帳戶一個命令對象 用它來表示HTML表單上的數據。

+0

非常感謝!我已經在上面添加了一個示例代碼。 – dtrunk