Условно обернуть элементы HTML - PullRequest
0 голосов
/ 07 ноября 2008

В моем приложении Seam есть компонент Seam, который возвращает (@Datamodel) список элементов, которые я хочу преобразовать в набор <li> элементов HTML. У меня это работает без проблем.

Но теперь я хочу разделить список в соответствии с выражением EL. Таким образом, выражение EL определяет, должен ли быть запущен новый элемент <ul>. Я попробовал следующее:

<s:fragment rendered="#{action.isNewList(index)}">
  <ul>
</s:fragment>
<!-- stuff that does the <li>'s goes here -->
<s:fragment rendered="#{action.isNewList(index)}">
  </ul>
</s:fragment>

Но это неверно, потому что вложенность для <ul> неправильная.

Как мне это сделать?

Ответы [ 4 ]

1 голос
/ 28 января 2009

Вы можете сделать это, используя тег JSF <f:verbatim>, который не очень красив, но работает:

<f:verbatim rendered="#{action.isNewList(index)}">
  &lt;ul&gt;
</f:verbatim>
<!-- stuff that does the <li>'s goes here -->
<f:verbatim rendered="#{action.isNewList(index)}">
  &lt;/ul&gt;
</f:verbatim>
0 голосов
/ 27 января 2009

Я не знаком с Seam конкретно, но я видел эту проблему при работе с XSLT и другими основанными на XML средами.

Обычно есть два решения:

  1. Переосмыслите свою страницу и архитектуру данных так, чтобы весь список записывался в зависимости от одного условия. Для этого может потребоваться цикл внутри фрагмента s:
  2. Обернуть поврежденный недействительный фрагмент HTML в <! [CDATA [...]]>
0 голосов
/ 28 января 2009

У вас должно быть что-то вроде этого (я буду использовать псевдокод):

<ul>
    <s:for items="itemList" ...>

      <s:fragment rendered="#{action.isNewList(index) && index > 0}">
        </ul>
        <ul>
      </s:fragment>
      <li>
        <!-- stuff that does the <li>'s goes here -->
      </li>

    </s:for>
</ul>
0 голосов
/ 27 января 2009

Я не знаком с Seam Framework, но, если я правильно понимаю проблему, что-то подобное может сработать.

<!-- before your loop, open your first <ul> if the (@Datamodel) is not empty -->

<s:fragment rendered="#{action.isNewList(index)}">
  </ul>
  <ul>
</s:fragment>
<!-- stuff that does the <li>'s goes here -->

<!-- after your loop, close your last </ul> if the (@Datamodel) is not empty -->
...