2

我目前正在运行一个有效的 Spring + Apache Tiles webapp。我需要展示一些示例代码来解释我的意图。

阿帕奇瓷砖配置:

<?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";
    }
}

这将显示www_base.jsphome.jspas body。我可以使用变量${hello}inwww_base.jsp和 in home.jsp

但我不想hello在每个 Controller 方法中设置能够www_base.jsp在每个页面上使用它。

有没有办法为 设置全局变量www_base.jsp,例如在 的构造函数中ExampleController

使用地图更新示例代码

@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";
    }
}
4

1 回答 1

2

使用带有 @ModelAttribute 注释的方法

方法上的 @ModelAttribute 表示该方法的目的是添加一个或多个模型属性。此类方法支持与 @RequestMapping 方法相同的参数类型,但不能直接映射到请求。相反,控制器中的 @ModelAttribute 方法在同一控制器中的 @RequestMapping 方法之前被调用。

@ModelAttribute 方法用于使用常用属性填充模型,例如用状态或宠物类型填充下拉列表,或者检索像 Account 这样的命令对象,以便使用它来表示 HTML 表单上的数据。

于 2012-06-24T18:15:06.960 回答