Создайте пользовательский тег JSTL, который возвращает объект вместо записи в выходной поток - PullRequest
0 голосов
/ 08 сентября 2011

Я искал способ создать пользовательский тег JSTL, который возвращает объект или карту, вместо того, чтобы просто использовать out.print для выгрузки разметки непосредственно из кода.

В частности, что я 'я пытаюсь сделать:

<c:set var="links">
    <util:getLinks cmsComponent="[id of some xml structure]" xPath="[start point]" />
</c:set>

<!-- parse the obtained structure into a nice ul -->

Я знаю, что могу:

  • использовать мой контроллер для этого и передать вычисленный объект обратно в представление.К сожалению, CMS, которую мы должны использовать, делает это намного более уродливым, чем было бы делать это в представлении - получение идентификатора компонента в коде Java является проблемой.Я знаю, что это отстой.
  • создайте функцию EL, которая возвращает объект, и выполните:
    <c:set var="links" value="${util:getLinks(componentId, xPath)}" />
    Мне интересно, могу ли я сделать это с помощью пользовательского тега, так как я не смог найтичто-нибудь, прибегая к помощи.

1 Ответ

2 голосов
/ 08 сентября 2011

Конечно, тег должен просто поместить свой результат в PageContext.Атрибут должен указывать имя, под которым он будет присутствовать.Так работает, например, <c:url /> - вы можете указать var и результат будет доступен по этому имени.

...