[JSF] Zugriff auf JSTL Werte mit nicht-<c: Tags

Basti54

Erfahrenes Mitglied
Klingt kompliziert, gibt aber bestimmt ne super einfache Lösung.

Ich will auf meine mit <c: definierten Werte auch in Textinputfeldern oder SelectMenüs zugreifen können. Wie stell ich das an? ${irgendwas} wird auch so in das Feld reigeschrieben.

Mal nen Beispiel, das nicht geht:
Code:
<c:forEach items="${client.routeInfo.myroute.routeelements}" var="routeelement" varStatus="index">

<c:choose>
<c:when test="${routeelement.status == 2}">
<h:inputText value="${routeelement.eingabe}" styleClass="inputfieldleft" 
required="true" rendered="true">
</c:when>
<c:when test="${routeelement.status == 1}">
<h:selectOneMenu required="true" value="${routeelement.adresse}">
<f:selectItems id="Addresses" value="${routeelement.adressen}" />
</h:selectOneMenu>
</c:when>
</c:choose>

</c:forEach>

Ausgabe im HTML-inputText ist:
Code:
${routeelement.eingabe}


beim Select gibt's nen Fehler, weil es halt nur nen String is.
 
Zuletzt bearbeitet:
Keiner 'ne Idee?

Oder vielleicht kann man die Variable irgendwie setzen, dass man das ganze mit den jsf-Tags nutzen kann?
 
Also ich kann mit c:set die Variable setzen, und dann auch in beispielsweise den <h.inputText> per #{name} einlesen. Das funktioniert aber auch nur solange, wie ich nur ein Element habe. will ich jedoch einen Vector oder so durch iterieren, bekomm ich eine NullPointer. Logisch, da der Name immer gleich bleibt und der JSF Tag vom Vorgänger ins Leere zeigt!

Weiß denn da keiner weiter?
 
Ok, vergessen wir mal JSTL und fragen wir mal anders:

Wie kann ich einen Vector mit JSF durchiterieren, auch wenn mir die Anzahl der Elemente nicht bekannt ist. Die Anwendung soll den Wert jedes Elements in einem input-Feld ausgeben.

Der Zugriff würde ja so erfolgen:

Code:
<h:inputText value="#{elements[1].userinput}" 
styleClass="inputfieldleft" required="true" />
<h:inputText value="#{elements[2].userinput}" 
styleClass="inputfieldleft" required="true" />

Wie kann ich das aber in eine Schleife packen (elements ist ein Vector)? Am besten ist eine Zählschleife, da ich zu jedem Objekt im Vector noch eindeutig definierte Buttons brauche (also ButtonElement1, ButtonElement2, ..)
 
Ok. so also auch nicht.
Hab es jetzt mit nem h:dataTable gemacht.

Code:
<h:dataTable value="#{client.routeInfo.myroute.routeElementsAsList}"
var="routeElement" border="0">
<h:column>
<h:inputText value="#{routeElement.userinput}"
styleClass="inputfieldleft" required="true">
</h:column>
</h:dataTable>

Das geth auch. Problem jetzt:
Ich brauch eine Ablaufsteuerung da drin! Sprich eine if Abfrage eines jeden Elements. Da ist mir eingefallen, man könnte ja <c:if test=... nutzen. nur mit ${routeElement} bekomm ich nicht das Objekt, was im DataTable gemeint ist. Kann da vllt einer helfen?
 
Hab das Problem gelöst. Und zwar doch
recht einfach.

Es gibt ein Attribut zu jeder JSF-Komponente, dass sich "rendered" nennt. hier
kann ich aus meinem Element eine boolean-Methode aufrufen, die den Status
verifiziert. gibt's ein true, wird die Komponente gerendert, wenn false, dann
nicht.
 

Neue Beiträge

Zurück