0 votes

Emballage conditionnel des éléments HTML

Dans mon application Seam, j'ai un composant Seam qui renvoie un fichier ( @Datamodel ) liste d'éléments que je veux transformer en un ensemble de <li> éléments HTML. Cela fonctionne sans problème.

Mais maintenant, je veux diviser la liste en fonction d'une expression EL. L'expression EL détermine donc si un nouveau <ul> devrait être lancé. J'ai essayé ce qui suit :

<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>

Mais cela n'est pas valable, parce que l'imbrication pour <ul> a tort.

Comment dois-je m'y prendre ?

1voto

Peter Hilton Points 10580

Vous pouvez le faire en utilisant l'outil JSF <f:verbatim> ce qui n'est pas joli mais fonctionne :

<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>

0voto

phloopy Points 4285

Je ne suis pas familier avec le cadre Seam, mais si je comprends bien le problème, quelque chose comme ceci pourrait fonctionner.

<!-- 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 -->

0voto

Mike Griffith Points 538

Je ne suis pas familier avec Seam en particulier, mais j'ai vu ce même problème se poser en travaillant avec XSLT et d'autres cadres basés sur XML.

Il existe généralement deux solutions :

  1. Repensez l'architecture de vos pages et de vos données de manière à ce que l'ensemble de la liste écrite dépende d'une seule condition. Cela peut nécessiter une boucle à l'intérieur du s:fragment.
  2. Enveloppez le fragment html non valide incriminé dans un < ![CDATA[ ... ]]>.

0voto

Eduard Wirch Points 4102

Vous devriez avoir quelque chose comme ceci (je vais utiliser un pseudo-code) :

<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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X