В моем приложении 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> неверно.
Как мне это сделать?
А также вывод указанного кода, чтобы мы могли видеть, что недопустимо во вложении.
нет вывода, но это явно не правильно сформированный xml, поскольку вложение идет <a> <b> </a> </b>.





Я не знаком с 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 неверно.
Я не знаком конкретно с Seam, но я видел, как та же проблема возникала при работе с XSLT и другими фреймворками на основе XML.
Обычно есть два решения:
У вас должно получиться что-то вроде этого (я буду использовать псевдокод):
<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)}">
<ul>
</f:verbatim>
<!-- stuff that does the <li>'s goes here -->
<f:verbatim rendered = "#{action.isNewList(index)}">
</ul>
</f:verbatim>
Нам нужно увидеть, как вы выполняете итерацию. Пожалуйста, разместите больше кода.