8

私はサイトメッシュでSpring 3を使用しています。サイトメッシュで定義されたデコレータページでSpring Context Beanを参照したいと思います。

問題は、SiteMesh フィルターが Spring コンテキストの外部で動作しているため、sitemesh デコレーター jsp ページの要求オブジェクトがネイティブの HttpServletRequest であり、コンテキストにアクセスするための便利な関数などを備えたラッパーではないことです。

デコレータ ページで Spring コンテキストにアクセスできるように、Spring と SiteMesh の両方を何らかの方法で構成する方法はありますか?

4

4 に答える 4

3

同じ問題が発生し、フィルターを使用して問題を解決しました。すべてのリクエストの環境データを設定するために使用できる環境フィルターを作成しました。フィルタでもアクセスする必要があるBeanを自動配線します。

@Component
public class EnvironmentFilter extends OncePerRequestFilter {

    @Autowired
    Object bean;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        request.setAttribute("bean", bean); // add bean or just specific properties of bean.

        filterChain.doFilter(request, response);

    }

}

web.xmlでフィルターを構成します。フィルターのマッピングには、Sitemeshフィルターの場合と同じパターンを使用してください。

<filter>
    <filter-name>environmentFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>environmentFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

フィルタから設定された属性がデコレータページから利用できるようになりました。

于 2013-01-04T16:21:54.690 に答える
0

私はあなたが求めていることを行う方法を知りませんが、別の選択肢もあります。コントローラのメソッドパラメータでHttpServletRequestを宣言できます。Sitemeshでモデルオブジェクトを使用できるようにする必要がある場合は、モデルオブジェクトをリクエストに追加するだけです。JSPコードは、バッキングコンテキストがサーブレットリクエストであろうとSpringMVCモデルであろうとまったく同じように見えます。

于 2011-08-17T04:13:36.420 に答える
0

あなたが好きなもののためにシングルトンを作成することから始めます。私は単に文字列を設定していますが、どのクラスも機能します:

public class MySiteEnvironment {

    private String someConfigurationParameter;

    public String getSomeConfigurationParameter() {
        return someConfigurationParameter;
    }

    public void setSomeConfigurationParameter(String someConfigurationParameter) {
        this.someConfigurationParameter = someConfigurationParameter;
    }

    /* SINGLETON */
    private static final MySiteEnvironment INSTANCE = new MySiteEnvironment();

    private MySiteEnvironment() {
    }

    public static MySiteEnvironment getInstance() {
        return INSTANCE;
    }
}

次に、値を注入する必要があります。

<bean id="mySiteEnvironment" class="MySiteEnvironment" factory-method="getInstance">
        <property name="someConfigurationParameter" value="myValueOrBean"/>
    </bean>

最後に、次の方法でアクセスします。

<%@ page import="MySiteEnvironment" %>
<% pageContext.setAttribute("env", MySiteEnvironment.getInstance()); %> 

式言語を使用して環境にアクセスできるようになりました

于 2011-04-06T19:40:57.993 に答える