2008-11-07 8 views
0

Dans mon application Seam, j'ai un composant Seam qui renvoie une liste d'éléments (@Datamodel) que je veux transformer en un ensemble d'éléments HTML <li>. J'ai ceci fonctionnant sans problème.Enveloppe conditionnellement les éléments HTML

Mais maintenant, je veux diviser la liste en fonction d'une expression EL. L'expression EL détermine donc si un nouvel élément <ul> doit être démarré. J'ai essayé les éléments suivants:

<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 c'est invalide, parce que l'imbrication des <ul> est erroné.

Comment est-ce que je devrais faire ceci?

+0

Nous devons voir comment vous itérez. S'il vous plaît poster plus de code. – branchgabriel

+0

Ainsi que la sortie de ce code afin que nous puissions voir ce qui est invalide au sujet de l'imbrication. – phloopy

+0

il n'y a pas de sortie, mais ce n'est clairement pas bien formé xml, puisque l'emboîtement va . – Sietse

Répondre

1

vous pouvez le faire en utilisant la balise JSF <f:verbatim>, ce qui est pas jolie, 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> 
0

Je ne suis pas familier avec le Seam Framework, mais si je comprends bien le problème, quelque chose comme ça 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 --> 
+0

Non, cela ne fonctionne pas, car l'imbrication du XML est fausse. – Sietse

+0

Pouvez-vous fournir la sortie de votre exemple de code? – phloopy

0

Je ne suis pas familier avec Seam spécifiquement, mais j'ai vu ce même problème venir lorsque l'on travaille avec XSLT et d'autres cadres basés sur XML.

Il y a généralement deux solutions:

  1. Repensez votre architecture de la page et les données de telle sorte que la liste entière écrite en fonction d'une seule condition. Cela peut nécessiter une boucle à l'intérieur du fragment s:. !
  2. Enroulez le fragment offensant non valide html dans un < [CDATA [...]] >
0

Vous devriez avoir quelque chose comme ça (je vais utiliser le code pseudo):

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