tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
1096
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    RoCMe RoCMe ist offline Mitglied Gold
    Registriert seit
    Dec 2007
    Beiträge
    190
    Hi!

    Ich hab so meine liebe Not mit den RichFaces Komponenten...

    Folgendes Szenario: In einer Bean habe ich eine Liste von Objekten, jedes davon soll einen eigenen Tab bekommen. Von der Theorie doch ganz einfach: TabPanel auf, Schleife rein und in die Schleife jeweils ein Tab erzeugen. Etwa so:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    <rich:tabPanel switchType="client" id="tabs">
    <ui:repeat value="#{bean.Liste}" var="element">
    <rich:tab label="#{element.name}">
    ...
    </rich:tab>
    </ui:repeat>
    </element>
    </rich:tabPanel>

    Soweit sieht das doch gut aus - zumindest in der Theorie. Praktisch umgesetzt führt das dazu, dass gar nichts angezeigt wird. Lediglich die Ausgabe
    "2010-02-26 16:58:34.301:INFOroject:a4j_form:msgDetails: tab panel has no enabled or rendered tabs!"
    weist darauf hin, dass irgendwas schief läuft.
    Testweise das repeat um den gesamten Panel, und schwupps: Ich sehe 2 korrekt dargestellte, korrekt benannte Tabs - nur leider einzeln in einen Panel verpackt, hilft mir also nicht wirklich.
    Nun denn, ich bin ja schon groß und kann schon ganz alleine googeln! Und siehe da: "Nimm c:forEach statt ui:repeat". Auch gut! Also die Schleife wieder nur um die Tabs rum und umbenannt (statt "ui:repeat" ein "c:forEach", statt value heißt es nun items, der Rest bleibt wie er ist!). Ganz toll: Immerhin sehe ich jetzt einen Tab, aber der hat nicht mal ein Label bekommen! Zugriffe auf das 'element' werden anscheinend ignoriert, aber Werte aus der Bean (z.B. "#{bean.getSimpleString}") werden korrekt ausgewertet.

    Noch mal zusammengefasst: ui:repeat klappt nicht innerhalb des TabPanels, und das forEach scheint auch nicht korrekt zu sein. Was mache ich falsch?

    Thx, Gruß,

    RoCMe
     

  2. #2
    RoCMe RoCMe ist offline Mitglied Gold
    Registriert seit
    Dec 2007
    Beiträge
    190
    Ich noch mal:

    Fast scheint es, als wäre ich für die Verwendung von c:forEach generell zu doof, liefert doch auch dieses aus dem Web kopierte einfache Beispiel nur ein einziges Hallo - und sonst nichts weiter

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    <table>
        <c:forEach var="i" begin="1" end="10">
          <tr>
            <td>Hallo</td>
          </tr>
        </c:forEach>
    </table>
    </c:forEach>

    Was mache ich falsch?

    EDIT: XHTML ein wenig formatiert
     

  3. #3
    Avatar von Sentoo
    Sentoo Sentoo ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Brühl
    Beiträge
    131
    Hi,

    ich verfolge bei so etwas einen anderen Ansatz. Wird hier in einem Blog beschrieben, nicht meiner

    Der Code im xhtml/jsp ist dann recht rudimentär
    HTML-Code:
    <f:view>
    	<h:form id="form_dynamic_tabs">
    		<rich:tabPanel id="panel_tab" binding="#{dynamicTab.tabPanel}">
    		</rich:tabPanel>
    	</h:form>
    </f:view>
    Das dynamische erzeugen ist in die Backing Bean verlagert. Die sollte dann am besten nicht im Request Scope stecken.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    package de.sentoo.jsf.dynamictab;
     
    // imports ...
     
    public class DynamicTab {
     
        private HtmlTabPanel tabPanel;
        
        public DynamicTab() {
            super();
            FacesContext tmpContext = FacesContext.getCurrentInstance();
            Application tmpApplication = tmpContext.getApplication();   
            tabPanel = (HtmlTabPanel)tmpApplication
                .createComponent(HtmlTabPanel.COMPONENT_TYPE);
            createDynamicTabs(tmpApplication);
        }
     
        private void createDynamicTabs(Application aApplication) {
            for(int i=1; i<5;i++) {
                HtmlTab tmpTab = (HtmlTab)aApplication
                    .createComponent(HtmlTab.COMPONENT_TYPE);
                String tmpLabel = "Dynamic Panel #" + String.valueOf(i);
                tmpTab.setLabel(tmpLabel);
                String tmpId = "dynamic_panel_" + String.valueOf(i);
                tmpTab.setId(tmpId);
                tabPanel.getChildren().add(tmpTab);
            }
        }
        
        public HtmlTabPanel getTabPanel() {
            return tabPanel;
        }
     
        public void setTabPanel(HtmlTabPanel aTabPanel) {
            this.tabPanel = aTabPanel;
        }
    }

    Edit #1:
    Ach ja, ich habe gar nicht geschrieben, warum ich das mache
    http://www.ilikespam.com/blog/c:fore...at-in-facelets
    http://drewdev.blogspot.com/2008/08/...-your-day.html

    Es funktioniert leider nicht immer.
    Geändert von Sentoo (02.03.10 um 06:57 Uhr)
     

Ähnliche Themen

  1. Generisch mehrdimensionale Arrays erzeugen?
    Von dbzworld im Forum Java
    Antworten: 7
    Letzter Beitrag: 12.12.09, 18:06
  2. Antworten: 3
    Letzter Beitrag: 07.09.09, 18:36
  3. MySqlDataReader Resultat "generisch" speichern
    Von ChristianR1905 im Forum .NET Datenverwaltung
    Antworten: 3
    Letzter Beitrag: 07.08.08, 09:59
  4. Generisch Programmieren
    Von Klatz im Forum Java Grundlagen
    Antworten: 8
    Letzter Beitrag: 18.06.08, 14:56
  5. Blend+XAML] TabPanel zu ResourceDict hinzufügen
    Von Moritz123 im Forum .NET Windows Forms
    Antworten: 0
    Letzter Beitrag: 05.05.07, 20:58