JSF datatable ineinander schachteln

Status
Nicht offen für weitere Antworten.

Marsman

Bekanntes Mitglied
Hallo Ihr!

Ich möchte in JSF zwei datatables ineinander schachteln. Leider habe ich mit google nix dazu gefunden. Ich hatte an folgende Konstruktion gedacht, funktioniert aber nicht:

Code:
<h:dataTable var="title" value="#{titleHandler.resultModel}">
	<h:column>
		<h:outputText value="#{title.id}"></h:outputText>
		<h:outputText value=" (#{title.name})"></h:outputText>
	</h:column>
	<h:dataTable var="volume" value="#{title.volumes}">
		<h:column>
			<h:outputText value="#{volume.name}"></h:outputText>
		</h:column>
	</h:dataTable>
</h:dataTable>

Es handelt sich bei den Daten um eine 1:n-Relation. Es sollen alle "Titles" aufgelistet werden und je Title die zugehörigen "Volumes". Hat das schon mal jemand gemacht??


Titus
 

Marsman

Bekanntes Mitglied
SnooP hat gesagt.:
Was heißt denn geht nich?

Die Daten der untergeordneten Tabelle werden nicht angezeigt. Ich vermute deshalb, dass ich etwas falsch mache. Auffällig ist noch, dass in eclipse die Eigenschaft "name" nicht als Teil von "volume" erkannt wird. Die Klasse Volume hat aber den entsprechenden Getter.

Ich wollte eigentlich wissen, ob das überhaupt möglich ist. Und wenn ja, ob jemand ein kurzes Beispiel hätte. Ich habe weder im Buch, noch bei Google dazu etwas gefunden.

Titus
 
I

Informant

Gast
Das geht unteranderem deswegen nicht, da deine geschachtelte DataTable nicht in einer Spalte steht.
Bau da die column tags drumrum und es könnte funktionieren.
Hast du dich schon mal mit RichFaces beschäftigt. Da gibt es auch eine SubTablke die man auf und zu klappen kann, genau für solche Dinge wer du sie vor hast.
 

Marsman

Bekanntes Mitglied
Informant hat gesagt.:
Bau da die column tags drumrum und es könnte funktionieren.

Dann erhalte ich folgende Exception:

Code:
SCHWERWIEGEND: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/sql/Result

Titus :roll:
 

Marsman

Bekanntes Mitglied
...also das Problem mit der Exception "NoClassDefFoundError" habe ich gelöst. Es lag daran, dass ich die JSTL Bibliothek nicht deployed hatte.

Leider wird meine Tabelle aber immer noch nicht angezeigt. Ich bekomme eine Exception "javax.faces.FacesException: Could not retrieve value of component with path : " zusammen mit "javax.faces.el.PropertyNotFoundException: Bean: org.hibernate.collection.PersistentSet, property: name".

Mir ist irgendwie noch nicht ganz klar, wie ich eine verschachtelte Tabelle programmieren muss. Hier nochmal der JSF-Code (Title steht zu Volume in 1:n Beziehung und name ist eine Eigenschaft von volume):

Code:
<h:dataTable var="title" value="#{titleHandler.resultModel}">
        <%-- diverse Spalten --%>
	<h:column id="column3">
		<h:outputText value="#{title.style}"></h:outputText>
		<h:outputText value=" (#{title.year})"></h:outputText>
		<h:dataTable var="volume" value="#{titleHandler.resultModel}">
			<h:column id="column31">
				<h:outputText value="#{title.volumes.name}"></h:outputText>
			</h:column>
		</h:dataTable>
	</h:column>
</h:dataTable>

Hier die Bean:

Code:
public class TitleHandler {
	
	private List<Title> result;
	private DataModel resultModel;
	
	private TitleDAO titleDAO;

	public TitleHandler() {
		titleDAO = DAOFactory.getTitleDao();
	}
	public Session getSession() {
		return InitSessionFactory.getInstance().getCurrentSession();
	}
 
	public List<Title> getResult() {
		Transaction tx = getSession().beginTransaction();
		result = titleDAO.findAll();
		tx.commit();
		log.debug(result);
		return result;
	}
	
	public DataModel getResultModel() {
		getResult();
		resultModel = new ListDataModel();
		resultModel.setWrappedData(result);
		return resultModel;
	}
	
	public String view() {
		Title title = (Title) resultModel.getRowData();
		FacesContext fc = FacesContext.getCurrentInstance();
		fc.getApplication().createValueBinding("#{titleViewHandler.title}").setValue(fc, title); 
		return "success";
	}
}

Hier die relevante Methode im DAO:

Code:
public List<Title> findAll() {
	return getSession().createCriteria(Title.class).setFetchMode("volumes", FetchMode.JOIN).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
	}


Titus
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
fiesematente JSF ajax innerhalb DataTable und verschachtelte EL (Brauch dringend hilfe) Allgemeines EE 8
B eine vom Admin hochgeladene csv -Datei in der Datatable auch von jedem User sichtbar Allgemeines EE 0
G Primefaces Zeile in DataTable auswählen Allgemeines EE 1
G JSF Datenstruktur für DataTable Allgemeines EE 2
S Primefaces DataTable und Vererbung Allgemeines EE 1
Raidri [SEAM] rich:dataTable sortBy Problem Allgemeines EE 6
W PrimeFaces datatable zentrieren Allgemeines EE 15
J JSF2.0 / Doppelklick DataTable / Richfaces Allgemeines EE 4
P <h:dataTable> doppelte ausgabe Allgemeines EE 8
D Liste für dataTable (JSF) manuell füllen Allgemeines EE 2
M h:datatable und Info auf leere Liste Allgemeines EE 2
N JSF - Frage zu Managed Beans und DataTable Allgemeines EE 4
J JSF: dataTable nebeneinander anordnen Allgemeines EE 5
N JSF + Facelets: Datatable wird nicht angezeigt Allgemeines EE 1
F DataTable mit Checkboxen Allgemeines EE 2
K probleme mit <h:dataTable> Allgemeines EE 2
O Anzeigen mehrerer columns in einer DataTable Allgemeines EE 4
K Datatable Löschen Fehler Allgemeines EE 6
S JSF datatable mit buttons Werte übergeben Allgemeines EE 5
smitty Farbe der Tabellenzellen in "<t:dataTable>" Allgemeines EE 5
F Index im Datatable Allgemeines EE 4
P JSF Datatable und löschen Allgemeines EE 2
C Seltsames Verhalten von JSF DataTable Allgemeines EE 2

Ähnliche Java Themen


Oben