Условно переносить элементы HTML

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

Но теперь я хочу разбить список в соответствии с выражением 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> неверно.

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

Нам нужно увидеть, как вы выполняете итерацию. Пожалуйста, разместите больше кода.

branchgabriel 07.11.2008 23:06

А также вывод указанного кода, чтобы мы могли видеть, что недопустимо во вложении.

phloopy 28.01.2009 01:09

нет вывода, но это явно не правильно сформированный xml, поскольку вложение идет <a> <b> </a> </b>.

Sietse 28.01.2009 17:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
680
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я не знаком с 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 -->

Нет, это не сработает, потому что вложение xml неверно.

Sietse 27.01.2009 19:08

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

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

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

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

<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>
Ответ принят как подходящий

Вы можете сделать это с помощью тега 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>

Другие вопросы по теме