首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sitemesh spring:模板中无法识别消息

Sitemesh spring:模板中无法识别消息
EN

Stack Overflow用户
提问于 2012-02-02 14:29:52
回答 1查看 461关注 0票数 0

我们在一个带有Sitemesh 2的项目中使用了spring:message标签。当在装饰器中使用spring:message时,-tag无法识别。我们可以在jsp页面中使用-tag,但也可以在装饰器jsp文件中使用。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
代码语言:javascript
复制
<excludes/>

<page-parsers>
    <parser content-type="text/html" encoding="UTF-8" class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
</page-parsers>

<decorator-mappers>
    <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
        <param name="config" value="${decorators-file}" />
    </mapper>
</decorator-mappers>

如果我们使用弃用的解析器FastPageParser没有问题,但是当使用新的HTMLPageParser时,就不能工作了。

我们该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2012-02-03 01:32:21

代码语言:javascript
复制
<spring:message code="msg.x.x.x"  />

我在使用FastPageParser的装饰器上工作得很好。

有几件事需要检查..

decorators?

  • I'm上是否包含了springframework和
  • 标记库不确定这是否会对过滤器链产生影响,但我使用的是一个自定义的配置装饰器映射器,它根据请求范围中的布局集选择装饰器。

所以在sitemesh.xml中:

代码语言:javascript
复制
<decorator-mappers>
    <mapper class="org.x.x.CustomConfigDecoratorMapper">
        <param name="config" value="${decorators-file}" />
    </mapper>
</decorator-mappers>

CustomConfigDecoratorMapper外观是这样的:

代码语言:javascript
复制
public class CustomConfigDecoratorMapper extends AbstractDecoratorMapper {

    private static final Logger logger = Logger.getLogger(CustomConfigDecoratorMapper.class);
    private ConfigLoader configLoader = null;

    public void init(Config config, Properties properties, DecoratorMapper parent) throws InstantiationException
    {
        super.init(config, properties, parent);
        try
        {
            String fileName = properties.getProperty("config", "/WEB-INF/decorators.xml");
            configLoader = new ConfigLoader(fileName, config);
        }
        catch (Exception e) 
        {
            throw new InstantiationException(e.toString());
        }
    }

    public Decorator getDecorator(HttpServletRequest request, Page page)
    {
            String layoutName = "default";

            String configLayoutName = ( String)request.getParameter("layoutName" );
            if ( configLayoutName == null )
            {
                    configLayoutName = (String)request.getAttribute("layoutName");
                    if ( configLayoutName == null )
                    {
                            configLayoutName = "default";
                    }
            }
            if ( configLayoutName != null )
            {
                    layoutName = configLayoutName;
            }

            Decorator result = getNamedDecorator(request, layoutName);
            return result == null ? super.getDecorator(request, page) : result;
    }

    public Decorator getNamedDecorator(HttpServletRequest request, String name)
    {
            Decorator result = null;
            try
            {
                    result = configLoader.getDecoratorByName(name);
            }
            catch (ServletException e)
            {
                    logger.error("getNamedDecorator(HttpServletRequest, String)", e);
            }
            if (result == null || (result.getRole() != null && !request.isUserInRole(result.getRole())))
            {
                    return super.getNamedDecorator(request, name);
            }
            else
            {
                    return result;
            }
        }
    }

除此之外..你有没有考虑过改用fmt:message?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9108067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档