如何在sitemesh装饰器中获取模型属性或spring的bean?

gla*_*666 8 spring-mvc sitemesh

我正在使用Spring 3和sitemesh.我想在sitemesh中定义的decorator页面中引用spring context bean.

问题是SiteMesh过滤器在Spring上下文之外工作,因此sitemesh decorator jsp页面上的请求对象是本机HttpServletRequest,而不是包含有用函数的包装器来访问上下文等.

有没有办法以某种方式配置spring和sitemesh以访问装饰页面中的Spring上下文?

wal*_*mon 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来您需要注入值:

<bean id="mySiteEnvironment" class="MySiteEnvironment" factory-method="getInstance">
        <property name="someConfigurationParameter" value="myValueOrBean"/>
    </bean>
Run Code Online (Sandbox Code Playgroud)

最后你可以通过以下方式访问它:

<%@ page import="MySiteEnvironment" %>
<% pageContext.setAttribute("env", MySiteEnvironment.getInstance()); %> 
Run Code Online (Sandbox Code Playgroud)

现在您可以使用表达式语言来访问环境