2016-07-08 10 views
0

Ich bin neu bei JSF so leid, wenn meine Frage trivial ist.Dynamische Generierung von HTML basierend auf einem Objekttyp

Ich muss eine Liste der Elemente von drei verschiedenen Arten präsentieren: sagen wir Bücher, Software und Kurse mit verschiedenen Metadaten (Attribute) und erfordern unterschiedliche visuelle Darstellung.

Jedes dieser Elemente erbt von einer abstrakten Elementklasse, daher habe ich eine Liste mit Elementen.

Ich dachte, eine abstrakte Methode in der Klasse Item zu deklarieren, so dass jede Unterklasse einen eigenen "Renderer" implementieren kann. Dann rufe ich auf der XHTML-Seite die Methode getHtml() mit EL an. Die Frage ist: Ist das der richtige Weg? Ich sehe einige Nachteile:

  1. Modell mit Blick gemischt
  2. HTML erzeugt mittels Java-Code (sehr schwer zu halten).

Jeder Vorschlag wird geschätzt.

Ich weiß nicht, ob diese synthetische Darstellung klar genug ist: bitte erkundigen Sie sich nach Erklärungen.

Vielen Dank im Voraus.

+0

Vielen Dank, BalusC! Du hast mich auf die richtige Schiene gefahren. Ich wusste, was ich brauche, aber ich wusste nicht, was ich fragen sollte. Die Antworten, auf die Sie hingewiesen haben, sind das, wonach ich gesucht habe. Danke noch einmal. – baronKarza

+0

Gern geschehen. – BalusC

Antwort

0
  1. Erstellen Sie eine Seite für die Auswahl zwischen den drei, sagen wir, eine Dropdown-Liste.
  2. Erstellen Sie für die Ansicht drei Dateien: book.xhtml, boftware.xhtml und courses.xhtml.
  3. Erstellen Sie dann eine verwaltete Bean.

    @ManagedBean 
    public class BkSoCoSelector { 
    private String myChoice = null; 
    //add setter and getter. 
    //add no-arg constructor. 
    } 
    
  4. ein Verfahren in der obigen Klasse Erstellen Sie dynamische Wahl zu treffen [Beispiel sehen] .note: Die unten Wahl basiert auf # 1 oben, die Dropdown-Liste.

    public String pageSelector(){ //if null, return nothing. //if this.myChoice == book, return book; //no file extension needed. //do the same for the other files. }

  5. Auf Haupt-Seite, # 1, fügen Sie folgendes

    <h:commandButton value = "Submit" action = "#{bkSoCoSelector.pageSelector()}"/>

Fassen wir zusammen:

  • dem Benutzer Geben Sie eine Auswahl
  • Set t Er wählte den Wert für die Instanzvariable. // hinter der Szene gemacht.
  • Ruft die jetzt eingestellte Instanzvariable ab.
  • Wählen Sie basierend auf dem Wert der Instanzvariablen eine Seite aus, die angezeigt werden soll.
+0

Xenwar, danke für die schnelle Antwort. Ich kann es nicht auf mein Problem anwenden, weil die Wahl des Elementtyps nicht möglich ist.Die Liste ist eine Ergebnismenge, die von Elasticsearch stammt. Daher muss ich alle Elemente zusammen darstellen. Der BalusC-Kommentar zeigte den korrekten Weg an, ein XHTML-Fragment dynamisch zu laden, das alle erforderlichen Informationen in einer Ergebnisliste enthalten kann. Vielen Dank für Ihren Vorschlag. – baronKarza

Verwandte Themen