2012-02-02 3 views
0

Sitemesh 2가있는 프로젝트에서 spring : message 태그를 사용하고 있습니다. 데 태그보다 데코레이터에서 spring : 메시지를 사용할 때 인식되지 않습니다. jsp 페이지에서는 데코레이터 jsp 파일에서 -tag를 사용할 수 있습니다. Sitemesh spring : 템플릿에서 메시지를 인식하지 못합니다.

우리는 문제가없는 이상 사용되지 않는 파서 FastPageParser를 사용하는 경우

<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> 

<?xml version="1.0" encoding="UTF-8"?> 

하지만,보다 새로운 HTMLPageParser를 사용하는 경우 작동하지 않습니다.

어떻게 해결할 수 있습니까?

답변

0
<spring:message code="msg.x.x.x" /> 

FastPageParser를 사용하는 데코레이터에서 잘 작동합니다.

확인하기 위해 몇 가지 ..

  • 당신이 당신의 장식에 스프링 프레임 워크와이 SiteMesh 태그 라이브러리를 포함하고 있는가?

  • 필터 체인에 차이가 있는지 확실하지 않지만 요청 범위에 설정된 레이아웃을 기반으로 데코레이터를 선택하는 사용자 지정 configdecorator 매퍼를 사용하고 있습니다. 그래서 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를 사용하여 고려 했는가?

관련 문제