# JSON in Primefaces Table



## kiwie (15. Okt 2013)

Hi,
also. ich hab ein projekt in dem ich RESTful Services habe und ein JSON übergeben wird. jetzt hatte ich das mit Jquery gemacht und konnte mir auch die Daten anzeigen lassen:

[XML]<!DOCTYPE HTML>
<html>
<head>
	<title>Test</title>
	<script type="text/javascript" src="jquery-2.0.3.min.js"></script>
	<script type="text/javascript">
		$(document).ready(function(){
		    $.getJSON('students',function(data){
		    	for(s in data){
		    		stud = data;
		    		$("#students").append(stud.rzPerson.name + " " +stud.rzPerson.firstName+" "+stud.rzPerson.matNumber+"<hr />");
		    	}
		    });   
		});
	</script>
</head>
<body>
	<h1>Test</h1>
	<div class="container">
                <div class="span-24">
                       <h2>students:</h2>
    					<div id="students">
    					</div>
                </div>
    </div>
</body>
</html>[/XML]

Dann dachte ich mir natürlich, da ich vorher mit Primefaces gearbeitet hab, ob ich das nicht kombinieren kann, um nicht alle Komponenten selbst schreiben zu müssen. Und weil Primefaces bisher das einige ist mit dem ich mich schon halbwegs auskenne.
Aber bei Primefaces muss man anscheinend immer direkt auf die Bean dahinter zugreifen und daraus die Daten laden. so zb:
[XML]<p:dataTable id="students" var="Student" value="#{studentService.students}" rowKey="#{Student.id}">  

		        <p:column headerText="Name" style="width:24%">  
		            <p:commandLink value="#{Student.rzPerson.name} #{Student.rzPerson.firstName}" 
		            	action="giveEffortEasy.xhtml?faces-redirect=true" title="StudentTitle">
                        <f:setPropertyActionListener value="#{Student}" target="#{effortService.stud}" />
                    </p:commandLink>
		        </p:column>   		  
		    </p:dataTable>[/XML]

Meine Frage also: Gibt es eine möglichkeit nicht über "studentService.students" auf ein attribut zuzugreifen, sondern direkt die Daten aus dem JSON zu verwenden?

Und wenn nicht: Was ratet ihr mir?

Danke schön!


----------



## kiwie (16. Okt 2013)

Also ich hab jetzt selbst die Antwort gefunden, wie ich sie ja schon erahnt hatte: nein das geht nicht. entweder also nur JQuery oder da eine entsprechende Bibliothek verwenden.


----------



## sence (30. Okt 2013)

Primefaces benötigt eine Collection mit Daten, damit diese in der Datatable iteriert werden kann.
Du könntest in einer Init-Methode (bzw. PostConstruct) die Daten via JSon abfragen und daraus die Collection bauen.
(so würde ich es machen)

Der Vorteil ist, da du aus den JSon Daten dann Objekte geformt hast, kannst du diese auch leicht weiter verwenden.
(save in DB usw....)

vg


----------



## kiwie (30. Okt 2013)

Dann macht es aber keinen Sinn mehr die Daten zuerst überhaupt in ein JSON umzubauen ;-) Es geht darum, dass der User über Tablet (und WLAN) auf die Anwendung zugreift und nur die JSON übertragen werden. Da ist JSF einfach nicht dafür gedacht, denn JSF braucht nun mal direkten Zugriff auf die Beans dahinter. Deshalb bin ich für den mobil erreichbaren Teil der Anwendung auf JQuery umgestiegen.
Danke für die Hilfe trotzdem


----------

