0

マスターページの分離コードが ASP.NET 側で行うのと同じことをしたいとしましょう。私は現在、Spring MVC を学習しており、Im はビューに JSP を使用しています。JSP 側では、ページを作成するたびに header.jsp と footer.jsp をインクルードします。

header.jsp ${ItemsQty} にこの var があるとしましょう。値を挿入するには、すべてのコントローラー要求マッピングでこれを行う必要があります。

model.addAttribute("ItemsQty", ItemsServices.count());

この値を設定する正しい方法は何ですか? すべてのコントローラー、すべてのリクエストメソッドに属性を追加しますか?

よろしく。

4

2 に答える 2

0

この値を設定する正しい方法は何ですか? すべてのコントローラー、すべてのリクエストメソッドに属性を追加しますか?

いいえ。これらの属性は、セッション スコープの属性です。セッション スコープの属性は、@SessionAttributesを使用して Spring MVC で指定されます。だからあなたの場合、それは

@SessionAttributes({"ItemsQty"})

そのため、「ItemsQty」をモデルに初めて追加すると、SessionStatus.setComplete()が呼び出されるまで (複数のリクエストにわたって) そこにとどまります。

于 2013-08-02T19:37:50.903 に答える
0

属性をモデルマップに追加するインターセプターを作成できます。インターセプターは、任意の URL にマップできます。

<mvc:annotation-driven>
    <mvc:interceptors>
        <mvc:mapping path="/items/**" />
        <bean="my.package.items.ItemsInterceptor"/>
    </mvc:interceptors>
</mvc:annotation-driven>

URL がマッピングと一致する/items/**と、このインターセプターは、ハンドラーが呼び出された後に属性をモデルマップに追加します。

class ItemsInterceptor extends HandlerInterceptorAdapter {

    @Autowired
    private ItemsServices service;

    public void postHandle(
                HttpServletRequest request,
                HttpServletResponse response,
                Object handler,
                ModelAndView modelAndView) 
                throws Exception {

        if (modelAndView != null) {
            modelAndView.addObject("ItemsQty", service.count());
        }
    }
}
于 2013-08-02T23:30:24.987 に答える