3

我正在寻求帮助以在 jsp 文件中显示 Spring 属性值。

我找到了一个与我有相同要求的链接。在 hasRole 中单击Using spring:eval

我正在使用Spring 2.5

这是我的 applicationContext-util.xml 文件:

xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

<util:properties id="viewPropertyConfigurer" location="classpath:conf/app_config.properties"/>
<context:property-placeholder properties-ref="viewPropertyConfigurer" />

在我的 menu.jsp

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<spring:eval expression="@viewPropertyConfigurer.getProperty('role.admin')" />

在 lib 文件夹中,我还有 spring-web-2.5.6.jar 文件,以确保 eval 在 jsp 中可以正常工作。但是不确定一旦我添加了 spring:eval 标记,jsp 根本没有加载它抛出的问题是什么

[ERROR,context.JspTilesRequestContext,http-8080-1] -[UID=galips - SessionID=691A896E807850568DF9B0F5356F6CB2] - JSPException while including path '/WEB-INF/jsp/menu.jsp'.

在我的应用程序中,我也在使用 servlet 过滤器,希望它不会成为问题。

提前感谢您的帮助。

4

1 回答 1

2

据我所知EvalTag是在 Spring 3 ( @since 3.0.1) 中添加的。如果您使用的是 Spring 2.5,那么您没有<spring:eval>支持。

可能的解决方案:

  • 切换到 Spring 3+
  • 使用自定义处理程序拦截器向您的请求添加其他信息
  • 编写您自己的标签以从应用程序上下文中提取信息

更新(选项 2 示例):

public class CommonViewAttributesInterceptor extends HandlerInterceptorAdapter {

    private static final String PROPERTIES_ATTR = "properties";

    private Properties properties = new Properties();

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler, ModelAndView modelAndView) throws Exception {
        request.setAttribute(PROPERTIES_ATTR, properties);
    }

    public void setPropertiesSource(Resource resource) throws IOException {
        InputStream input = resource.getInputStream();
        try {
            properties.load(input);
        } finally {
            input.close();
        }
    }

}

然后,您需要在处理程序映射中配置此拦截器。

于 2013-06-06T21:33:40.843 回答