JSF Composite components - dynamische dataTable?

membersound

Bekanntes Mitglied
Hallo,

ich habe eine Composite componente, in der ich mir eine dataTable definiere.
Ist es möglich, die Anzahl der Columns dynamisch zu machen? Also nur eine column zu definieren, und je nach Anzahl der Parameter immer wieder diese example column Definition aufzurufen?

Oder machen wir mal ein anderes Beispiel: eine composite für eine form mit input fields, bei der die Anzahl der Felder erst beim Verwenden festgelegt werden soll. Geht das?

Normalerweise sieht es ja so aus: ich muss jedes Attribut einzeln definieren, und auch die Verwendung des Attributs einzeln definieren.
Dh wenn ich eine Form mit 4 und eine mit 9 Eingabefelder habe, dann muss ich mir 2 einzelen composite components bauen, obwohl die Logik eigentlich immer die selbe ist...

Geht das nicht einfacher?
Java:
    <composite:interface>
 
    	<composite:attribute name="nameLable" />
    	<composite:attribute name="nameValue" />
//+ x weitere attribute
    </composite:interface>
 
    <composite:implementation>
 
	<h:form>
		<h:panelGrid columns="2">
 
			#{cc.attrs.nameLable} : 
			<h:inputText id="name" value="#{cc.attrs.nameValue}" />

//+ x weitere inputText fields je nach attribute

		</h:panelGrid> 
	</h:form>
    </composite:implementation>
 
Danke, aber das ist alles nicht das was ich suche.

Ich wollte ja primär solche Aufrufe vereinfachen:

#{cc.attrs.nameLable} :
<h:inputText id="name" value="#{cc.attrs.nameValue}" />

Bzw sie nicht x-mal wiederholen müssen.
Aber mir ist aufgefallen: selbst wenn ich eine Möglichkeit finde, dann fehlt mir immer noch die Möglichkeit meine CC mit varibaler Anzahl von attributen zu füllen.

Also werd ich das wohl so machen, dass ich einfach alles was irgendwo auftritt an attributen in der CC definiere, aber die attribute not required mache. Dann kann ich einfach meine eigene dataTable mit den attributen aufrufen, die ich halt gerade brauche. Und der Rest wird automatisch nicht dargestellt (was ich bisher nicht wusste, grad ausversehen bemerkt).
 
es gibt auch schöne komonenten z.b. von icefaces, das schaut dann ca so aus:
HTML:
<ice:dataTable value="deine reihen als liste" var=xyz varstat=abc>
 <ice:columns value="deine spalten als liste" var=xyz varstat=abc>
    blablabla
 </ice:columns>
</ice:dataTable
 
Wie kann ich denn eigentlich einer eigenen Composite Componente sagen, dass sie eine andere updaten soll?

Ich habe es jetzt so versucht, dass ich der einen ein "update" attribute mitgebe, dass dann in das update field des buttons in der CC kommt.
Dann habe ich die zweite CC mit genau dieser id annotiert.
Offenbar wird die id auch gefunden, zumindest lässt sich die page einwandfrei aufrufen.

Aber beim click auf den Button passiert rein gar nichts!

(prinzipiell sollte das aber gehen. Wenn ich alles zusammen in eine panelGroup mit autoUpdate packe, dann funktioniert alles im kleinen. Aber ich will die Updates der Komponenten ja selber über id's steuern).

input komponente:
Java:
<composite:interface>
<composite:attribute name="update"/>
</composite:interface>

<composite:implementation>
<p:commandButton value="Create" update="#{cc.attrs.update}" action="register...">
</composite:implementation>


JSF:
Java:
<cc:myInput update=":myDataTable">

<cc:myDataTable id="myDataTable">

Jemand eine bessere Idee?
 
gib mal den namen des Forms mit an also :formName:myDataTable
PrimeFaces hats gerne so exakt wie möglich. Sollte auf jeden Fall gehen, update Attribute in eigenen ccs verwenden wir auch massig.
 
Ok, wenn ich allen enthaltenen Elementen eine id gebe und sie exakt referenziere geht es!

Fragt sich nur, wofür dann diese option prependId="false" gut ist? Wenn ich die nämlich benutze und dann eben die entsprechende id weglasse, wird nichts mehr gefunden...
 

Neue Themen


Zurück
Oben