2

私は現在、Spring + Apache Tiles webapp を実行しています。私の意図を説明するために、いくつかのサンプルコードを示す必要があります。

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

これは as で表示www_base.jsphome.jspbodyます。と同様に変数を使用でき${hello}ます。www_base.jsphome.jsp

しかし、各コントローラーメソッドを各ページhelloで使用できるように設定したくありません。www_base.jsp

www_base.jspのコンストラクタなどでグローバル変数を設定する方法はありExampleControllerますか?

マップを使用したUPDATE サンプル コード

@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 は、そのメソッドの目的が 1 つ以上のモデル属性を追加することであることを示します。このようなメソッドは @RequestMapping メソッドと同じ引数タイプをサポートしますが、リクエストに直接マップすることはできません。代わりに、コントローラーの @ModelAttribute メソッドは、同じコントローラー内で @RequestMapping メソッドの前に呼び出されます。

@ModelAttribute メソッドは、一般的に必要な属性をモデルに設定するために使用されます。たとえば、ドロップダウンに状態やペットの種類を入力したり、Account などのコマンド オブジェクトを取得して HTML フォームでデータを表すために使用したりします。

于 2012-06-24T18:15:06.960 に答える