Можно ли определить декоратор непосредственно в JSP с Sitemesh? - PullRequest
2 голосов
/ 08 марта 2011

Я знаю, что должен определить декораторы в файле конфигурации или в моем собственном подклассе ConfigurableSiteMeshFilter. Например:

public class SitemeshFilter extends ConfigurableSiteMeshFilter {

    @Override
    protected void applyCustomConfiguration(final SiteMeshFilterBuilder builder) {
        builder.addDecoratorPath("/*", "/WEB-INF/views/layouts/default.jsp");
    }
}

Это работает для меня, но это не идеально. Могу ли я определить, какой декоратор использовать непосредственно в файле JSP?

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html sitemesh:decorator="layouts/default.jsp"> <!-- something like this -->
    <head>
        <title>Home</title>
        <meta content="test" name="description" />
    </head>
    <body>
        <h1>Hello world!</h1>
        ${body}
    </body>
</html>

1 Ответ

8 голосов
/ 23 марта 2011

используйте метатег

Мы делаем это все время.

В вашем sitemesh.xml разрешите странице находиться в метатеге с именем decorator, например:

   <decorator-mappers>    
      <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
         <param name="property.1" value="meta.decorator"/>
         <param name="property.2" value="decorator" />
      </mapper>
  </decorator-mappers>

В вашем decorators.xml добавьте декоратор, например:

<decorators>
   <decorator name="default" page="/WEB-INF/decorators/default.jsp" />
   <decorator name="alternative" page="/WEB-INF/decorators/alternative.jsp" />
<decorators>

Затем на странице html или jsp вы можете добавить метатег под названием decorator для переключения между стандартными и альтернативными шаблонами:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
    <head>
        <meta name="decorator" content="alternative" />
        <title>Home</title>
        <meta content="test" name="description" />
    </head>
    <body>
        <h1>Hello world!</h1>
        ${body}
    </body>
</html>

Надеюсь, это поможет ...

...