2017-09-14 4 views
2

Je veux créer une grille comme ceci:Rendu du composant enfant lorsque la propriété de rendu du composant parent est false?

Element1 Element2 Element3

Element4 Element5 Element6

je le code suivant:

<ui:repeat value=#{beans.myElementList} var="element" varStatus="i"> 
    <b:row rendered=#{i.index%3==0}> 
     <b:column medium-screen="4"> 
     #{element.display} 
     </b:column> 
    </b:row> 
</ui:repeat> 

Le résultat de mon code:

Element1

Element4

Comment résoudre ce problème?

+0

Vous ne pouvez pas utiliser 'rendu' comme ceci ... Si vous voulez réellement commencer une nouvelle ligne chaque trois éléments, vous avez besoin d'une solution plus créative. Un de ceux-ci: https://stackoverflow.com/questions/10481742/jsf-2-uirepeat-group-every-n-items-inside-a-div – Kukeltje

Répondre

1

Essayez le code ci-dessous.
Le premier ui: repeat rend <row> pour chaque 3 éléments,
le second rend les éléments (au sein de <column>) dans des groupes de 3 éléments chacun.

<ui:repeat value="#{beans.myElementList}" step="3" varStatus="i" > 

    <b:row> 
     <ui:repeat value="#{beans.myElementList}" var="element" 
        step="1" offset="#{i.index}" 
        size="#{i.index + 3 le beans.myElementList.size() ? i.index + 3 : beans.myElementList.size() }" 
        varStatus="j" > 
      <b:column medium-screen="4"> 
       #{element.display} 
      </b:column>   
     </ui:repeat> 
    </b:row> 

</ui:repeat> 
+0

Donc vous êtes d'accord que c'est (en plus du 'div's en train de remplacer par un 'row' et' column') un duplicata de https://stackoverflow.com/questions/10481742/jsf-2-uirepeat-group-every-n-items-inside-a-div? – Kukeltje

+0

Merci. Mon problème est résolu. –

3

<b:panelGrid> à la rescousse:

<ui:repeat value=#{beans.myElementList} var="element"> 
    <b:panelGrid columns="3" size="md"> 
    #{element.display} 
    </b:panelGrid> 
</ui:repeat> 

<b:panelGrid> est inspiré par le <h:panelGrid> standard, ce qui rend un tableau HTML. De même, <b:panelGrid> rend une table constituée de lignes et de colonnes Bootstrap. Il suffit de mettre tout ce que vous voulez afficher dans la grille du panneau. BootsFaces détecte automatiquement quand rendre une nouvelle ligne.

Le cas d'utilisation que je pensais à l'origine est une forme. Plus souvent qu'autrement, une telle forme est une répétition de lignes identiques: étiquette, champ de saisie, message d'erreur. <b:panelGrid> vous permet de créer des formes tabulaires comme celle-ci avec un minimum d'effort.

Voir également documentation of <b:panelGrid>.

Ajout jusqu'à la sortie de BootsFaces 1.2.0: En regardant la documentation, je n'étais pas content de ce que j'ai vu. Donc j'ai corrigé et mis à jour. Jusqu'à la sortie de BootsFaces 1.2.0, voir aussi documentation of the developer showcase.