[JSF 2.0] Ausgabe aus Schleife bzw. einer ArrayList

alberti

Mitglied
Hallo zusammen,

ich beziehe aus einer Schleife folgendes:
Java:
while(true){
		++i;
		System.out.println(sf.title);
		System.out.println(sf.path2Ressource);
		System.out.println(sf.relevance);
		System.out.println(sf.summary+ "\n\n");
		if(i >= al.size())
			break;
		sf = al.get(i);
	}
Anmerklung: al ist dabei eine ArrayList aus der ich die Objekte mit den Werten hole.
Bisher sah die Ausgabe auf der Konsole wie oben zu sehen ist aus und funktioniert auch einwandfrei.

Nun ist meine Frage, wie ich diese Werte mittels JSF ausgeben kann, so da diese alle auf der Webseite dargestellt werden?


Nachtrag (Dies könnte hier ein alternativ Lösungsweg für mein Problem sein, d.h. ne Lösung für Ausgabe aus Schleife, würde ich immer noch bevorzugt nehmen 🙂)

Ich habe gelesen, das dies u.a. mit dem <:dataTable-Tag geht. Allerdings gibt es bei mir hier ein paar Probleme.
Hierfür muss ich meine Struktur erklären.
Ich habe eine Klasse HauptStruktur diese wird von einer Klasse SpeziellenStruktur erweitert (extends HauptStruktur).
Dann habe ich wiederum eine Klasse KonkreteStrukturErgebnis, welche wie folgt aussieht:
Java:
import java.util.ArrayList;
public class KonkreteStrukturErgebnis {
	private ArrayList<HauptStruktur> sb;
	
	
	public KonkreteStrukturErgebnis(){
		sb = new ArrayList<HauptStruktur >();
	}
	
	public void addHauptStruktur (HauptStruktur sfr){
		sb.add(sfr);
	}
	
	public ArrayList<HauptStruktur > getHauptStruktur (){
		return this.sb;
	}

}

Diese ist sozusagen meine Struktur, welche eine Liste (genauer ArrayList) von HauptStruktur darstellt und in meinem Fall dazu benutzt als Liste für meine SpeziellenStrukturen (es gibt mehrere) zu dienen.
Dann habe ich eine Klasse EnterpriseSchicht (dies ist eine Klasse für meine Anfragen für meine Enterprise Suche). Dann habe ich eine Klasse Core in welcher wie folgt aussieht:
Java:
public class Core {
	
	final private String host = "localhost";
	
	final private int port = 10000;

	private KonkreteStrukturErgebnis csr;
	public void setSearch(String queryString) throws Exception{
		AbstractSchicht aal = new EnterpriseSchicht(); 

		
		this.csr = aal.response(aal.doConnection(aal.connectionDetails(this.host, this.port)), aal.queryParameters(queryString));
		
		
	}
	
	public KonkreteStrukturErgebnis getSearch(){
		return this.csr;
	}

Der Aufbau ist absichtlich so, um einzelne Teile schnell erweitern bzw. ändern zu können ohne alles neu schreiben zu müssen.
Das Bean sieht wie folgt aus:

Java:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

@ManagedBean
@SessionScoped
public class SearchBean {
private String searchWord;
private Core mycore = new Core();




public Core getMyCore(){
	return this.mycore ;
}




public void setSearchWord(String searchWord)  {
	this.searchWord = searchWord;
}

public String dosearch() throws Exception{
	
		this.mycore.setSearch(this.searchWord );
	
	return null;
}

public String getSearchWord() {
	return searchWord;
}

public String getA() {
	return searchWord;
}



}

Und und nun das Facelet was nicht funktionieren will:
[XML]<h:dataTable var="core" value="#{searchBean.mycore.search}">
<h:column>
<h😱utputText value="#{core.titel}"/>

</h:column>
<h:column>
<h😱utputText value="#{core.path2Ressource}"/>
</h:column>
<h:column>

<h😱utputText value="#{core.relevance}"/>
</h:column>
<h:column>

<h😱utputText value="#{core.summary}"/>
</h:column>
</h:dataTable>[/XML]

Es es will mir nicht in den Kopf, warum das Ganze nicht so funktioniert, wie ich es hier dargestellt habe bzw. wie ich eben auch entwickelt habe???:L😡

Ich hoffe einer von euch weiß Rat🙂




Beste Grüße und besten Dank,

alberti
 
Zuletzt bearbeitet:
Hallo zusammen,

mittlerweile habe ich das Ausgeben lösen können:
[XML]....
<h:dataTable var="core" value="#{searchBean.mycore.search.hauptStruktur}">
...
[/XML]

Jetzt muss noch die richtig Ausgabe formatiert werden (das ist kein Problem). Allerdings habe ich jetzt bei der Ausgabe das Problem, dass das letzte Element (Suchresultat/SpeziellenStruktur) 2mal ausgegeben wird.
Das Problem hatte ich bei der Konsolenausgabe auch gehabt, konnte es aber wie in der Schleife oben zu sehen lösen.

Hoffe mir kann da jmd. weiterhelfen 🙂
 
Hi,

kleine Anmerkung zu deinem ersten Code-Beispiel: Wäre sowas nicht einfacher:

Java:
  for(<Typ_von_sf> sf : al) {
    System.out.println(sf.title);
    System.out.println(sf.path2Ressource);
    System.out.println(sf.relevance);
    System.out.println(sf.summary+ "\n\n");
  }

Ich weiss jetzt nicht von welchem Typ die Variablen "al" und "sf" sind, aber
es scheint ja zu passen.
 
Hi,

danke für Deine Antwort 🙂 Ist in der Tat so einfacher und schöner.
Die Ausgabe an sich funktioniert, nur hätte ich gerne eine etwas andere Darstellung der Daten.
Derzeit sieht diese wie folgt aus:

Code:
<td>Titel</td><td>Relevanz</td><td>Pfad</td><td>Zusammenfassung</td>

ich hätte allerdings gerne solch eine Darstellung:
Code:
<tr><td>Titel</td><td>Relevanz</td></tr><tr>Pfad</tr><tr>Zusammenfassung</tr>

nur wie kann das realisieren, immerhin habe ich kein <h:row-Element???:L
 
Hmm,

dann musst du wohl über deine Hauptstruktur iterieren und dir deine Tabelle selber zusammenbasteln. Weiss
jetzt grad nicht welches Tag fürs iterieren gut ist, aber da gibts was ;-) Also ungefähr so:

Java:
    <iteratorTag var="core" value="#{searchBean.mycore.search.hauptStruktur}">
        <tr>
            <td>Titel</td><td>Relevanz</td>
        </tr>
        <tr>
            <td>Pfad</td><td>Zusammenfassung</td>
        </tr>
    </iteratorTag>
 
Hi,

habe die Darstellung jetzt hinbekommen mittels PrimeFaces bzw. <p:dataTable:
Code:
<p:dataTable rendered="#{searchBean.searched}" var="core" value="#{searchBean.jesl.search.structResult}"
			selection="#{searchBean.jesl.result}"
			selectionMode="cellblock">
			
			
			<p:column>
				<p:panel header="#{core.title}">
					<h:panelGrid columns="1" border="0" style="width:100%">
						
							<h:outputText value="#{core.summary}" style="color:#006633;" />
						

						
							<h:outputText value="#{core.path2Ressource}"
								style="color:#003366;text-decoration: underline;" />
						

						<h:outputLabel value="Relevanz: "
							style="font: small-caps bold 1em/1.5em verdana, sans-serif;" >
							<h:outputText value="#{core.relevance}" /></h:outputLabel>
					</h:panelGrid>
				</p:panel>


			</p:column>


		</p:dataTable>

Allerdings tun sich hier immer noch 2 (kleine) Problem auf:

Problem 1 - nun gelöst
Das erste Problem ist das sobald ich die einen neue Eingabe mache zum Suchen das ich folgenede Meldung erhalte:
Code:
exception

javax.servlet.ServletException
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)

root cause

java.lang.NullPointerException
	java.lang.reflect.Array.newArray(Native Method)
	java.lang.reflect.Array.newInstance(Array.java:52)
	org.primefaces.component.datatable.DataTableRenderer.decodeMultipleSelection(DataTableRenderer.java:174)
	org.primefaces.component.datatable.DataTableRenderer.decodeSelection(DataTableRenderer.java:151)
	org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:63)
	javax.faces.component.UIComponentBase.decode(UIComponentBase.java:790)
	javax.faces.component.UIData.processDecodes(UIData.java:980)
	org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:379)
	javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
	javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
	javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:941)
	com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)

Ich verstehe beim besten Willen nicht, woher der Fehler kommt:bahnhof:.

Problem 2
Das zweite Problem ist, das ich keinen Rand im <h😛anelGrid haben möchte (daher auch border=0) allerdings ist überall (im panelGrid also in der Tabelle) ein Rand zu sehen.???:L


Ich hoffe einer von euch kann mir heir weiterhelfen🙂



Update
Problem 1 konnte ich lösen, die Bean war als SessionScope deklariert nun habe ich das auf RequestScope geändert und es funktioniert.
 
Zuletzt bearbeitet:
Pack die Style-Informationen für den Rand auch mal in das "style"-Attribut:

Code:
<h:panelGrid columns="1" style="width:100%; border: 0px;">
 
Hi,

erstmal Danke für eure Schnellen Antworten 🙂,

@Cage Hunter
Was meinst du mit !important, wie und wo genau muss ich das ran hängen?


Besten Dank, alberti
 

Neue Themen


Zurück
Oben