我们在一个带有Sitemesh 2的项目中使用了spring:message标签。当在装饰器中使用spring:message时,-tag无法识别。我们可以在jsp页面中使用-tag,但也可以在装饰器jsp文件中使用。
<?xml version="1.0" encoding="UTF-8"?><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时,就不能工作了。
我们该如何解决这个问题呢?
发布于 2012-02-03 01:32:21
<spring:message code="msg.x.x.x" />我在使用FastPageParser的装饰器上工作得很好。
有几件事需要检查..
decorators?
所以在sitemesh.xml中:
<decorator-mappers>
<mapper class="org.x.x.CustomConfigDecoratorMapper">
<param name="config" value="${decorators-file}" />
</mapper>
</decorator-mappers>CustomConfigDecoratorMapper外观是这样的:
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?
https://stackoverflow.com/questions/9108067
复制相似问题