struts2: iterator status in name-Feld benutzen

oetzi

Bekanntes Mitglied
Hallo zusammen,

frohe Weihnachten! :)

ich möchte eine ArrayList dynamisch mit einer variablen Anzahl Objekte füllen lassen.
Da dachte ich mir könnte ich ja einfach über itStatus.index den Index des Iterators nutzen, um die einzelnen Felder der ArrayList anzusprechen.
Allerdings wird bei mir das "#itStatus.index" nur im value-Feld mit dem Indexwert ersetzt. Benutze ich "#itStatus.index" im name-Feld, wird einfach dieser String so verwendet.

Beispiel:
<s:select name="#itStatus.index" list="allStatus" listKey="id" listValue="#itStatus.index" label="new Type"/>
wird zu:
<select name="#itStatus.index [HIER WIRD ES NICHT ERSETZT]" id="adminSkillDetailsSaveChanges_#itStatus_index">
<option value="0" selected="selected">0</option>
<option value="1">0</option>
</select>

Kann mir jemand sagen, ob man das irgendwie hinkriegen kann?

Schönen Gruß,
oetzi
 
G

gman

Gast
Probier mal stumpf:

Code:
<s:select name="<s:property value="%{#itStatus.index}"/>" list="allStatus" listKey="id" listValue="#itStatus.index" label="new Type"/>
 

oetzi

Bekanntes Mitglied
Hey gman,

vielen Dank! Eine kleine Anpassung musste ich zwar noch machen, aber du hast mich auf die richtig Spur gebracht.

So funktioniert es:
Code:
<s:select name="list[%{#itStatus.index}]" list="allStatus" listKey="id" listValue="#itStatus.index" label="new Type"/><br />

Allerdings würde mich interessieren, warum ich mal direkt über #itStatus.index und mal über %{#itStatus.index} an die Werte komme.
Wo ist der Unterschied? Kann mir das jemand erklären?
 
I

ign0rant

Gast
Kann man unter Tag Syntax nachlesen.

Boiled down, the tag attributes are evaluated using three rules.

1. All String attribute types are parsed for the "%{ ... }" notation.
2. All non-String attribute types are not parsed, but evaluated directly as an expression
3. The exception to rule #2 is that if the non-String attribute uses the escape notion "%{}", the notation is ignored as redundant, and the content evaluated.
 

oetzi

Bekanntes Mitglied
Boiled down, the tag attributes are evaluated using three rules.

1. All String attribute types are parsed for the "%{ ... }" notation.
2. All non-String attribute types are not parsed, but evaluated directly as an expression
3. The exception to rule #2 is that if the non-String attribute uses the escape notion "%{}", the notation is ignored as redundant, and the content evaluated.

Danke für die Link und die Infos!
Leider ist mir das immernoch nicht ganz klar geworden...

zu 1.: mhh, nehmen wir an ich hätte ein stringWert="test12" Attribut in meiner Action und nutzte in der JSP <s:property value="stringWert" />
Dann wird mir ja test12 ausgegeben. Was soll mir jetzt das "All String attribute types are parsed for the "%{ ... }" notation." sagen? Wo taucht denn hier das %{...} auf?

zu 2.: Also irgendwie komme ich mit den Begrifflichkeiten durcheinander. Was heißt hier "evaluated directly as an expression"?

Könntest du mir vielleicht mal in eigenen Worten erklären, wann was wie interpretiert wird?
 
G

gman

Gast
Ich denke mal das "listValue" ein Attribut ist das durch Struts2 selber verarbeitet wird, "name" jedoch an das zu grunde
liegende Tag weitergeleitet wird. Deshalb wird das was im "name"-Attribut steht auch nicht ausgewertet. Erst wenn
du mit "%{}" arbeitest weiß Struts2 das es da auch noch was zu tun hat.
Ist jetzt leicht aus der Hüfte geschossen, kannst ja mal schauen ob du das durch Analyse des Struts2-Quellcodes
verifizieren kannst ;-)
 

oetzi

Bekanntes Mitglied
Ah jo, klingt irgendwie logisch :)
Im Value Feld (beispielsweise eines textfeldes) steht ja typischer Weise der Inhalt eines Attributes der Action drin (z. B. vorher eingegebene E-Mailadresse, die man ändern kann).
Allerdings kommt es weniger häufig vor, dass der name, und damit ja das Zielattribut in der Action, dynamisch gewählt werden soll.

Also erzwinge ich mit %{xyz}, dass struts2 xyz auf dem valueStack sucht und ggf. den Wert einsetzt, richtig?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Struts Struts2 / Freemarker / Maven2: Markieren von Deployment-Stufen in der View-Schicht Web Tier 4
M STRUTS2 - Array als Parameter übergeben Web Tier 2
D Tomcat/Struts2 Benutzer bestimmt Name der URL Web Tier 2
B (JSP)+(Struts2)+(Servlet) Konfiguration web.xml Web Tier 2
O JSP struts2 tag: Problem mit Dezimalzahlen Web Tier 2
P Struts Struts2 if tag Problem mit getText() Web Tier 3
D Struts2 Combobox ohne Eingabefeld Web Tier 2
O struts2: Zeilenumbruch in textarea verwenden Web Tier 3
7 struts2-jquery-Plugin Einbindung Web Tier 11
7 Struts2 in webbasierter Anwendung Web Tier 39
O struts2 - Probleme mit parametrisierten URLs Web Tier 5
O Struts2 - vollständige Beschreibung der Tags gesucht Web Tier 6
P Struts2 - Mehrere Methoden/Actions in einer Klasse + Validation Web Tier 2
J struts2 result="input" Web Tier 2
O [Struts2] Vorbelegung von Feldern Web Tier 6
J struts2: vom value stack zum servlet Web Tier 14
O Escapen oder nicht Escapen, das ist hier die Frage :) (Struts2) Web Tier 2
O Struts2: Probleme mit Links aus Packages raus Web Tier 9
S Struts2 zeilenumbruchporblem bei textareas Web Tier 4
K [Struts2] autom. Action-Erkennung Web Tier 2
7 Struts iterator index JS-Funktion übergeben?? Web Tier 2
L Struts 2 Iterator Validation Web Tier 4
feinperligekohlensaeure JSF JSF + Tomcat 9 | HTTP Status 404 |(com.sun.faces.config.ConfigureListener?) Web Tier 1
D HTTP 404 Status bei JSF Web Tier 5
2 JavaScript Status erkennen? Web Tier 3
R Status als Bild anzeigen lassen. Wie? Web Tier 15
Z Servlet Response HTTP-Status 200 wird nicht übertragen Web Tier 3
K Http Status Code abfragen Web Tier 8

Ähnliche Java Themen

Neue Themen


Oben