2009-04-12 4 views
0

Ich möchte eine Map-Eigenschaft für eine Struts2-Aktion aus einer JSP auffüllen. Welches Format haben die Datennamen, die ich verwenden soll? Am Anfang bin ich interessiert an einer Karte < String, String> aber in der Zukunft würde ich interessant sein, um eine Karte < String, DomainClass> wo die DomainClass Eigenschaften eigene hat.Feldnamen für Struts2-Map-Einträge in einer JSP

Antwort

3

Ich habe eine Aktion, mit einer Eigenschaft wie folgt -

private Map<String,String> assetProps; 
... 
public Map<String, String> getAssetProps() { 
    return assetProps; 
} 

public void setAssetProps(Map<String, String> assetProps) { 
    this.assetProps = assetProps; 
} 

Wenn Sie Werte auf der Karte, gibt es grundsätzlich zwei Schritte. Zunächst einmal kann OGNL die Karte nicht instanziieren, also liegt es an Ihnen. In meiner Aktion, ich die herstellbaren-Schnittstelle implementieren, aber es instanziiert, bevor die Lauf ‚public String input()‘ Methode wie folgt -

public class EditAction extends ActionSupport implements Preparable { 
... 
    public void prepare() { 
     // just satisfying Preparable interface so we can have prepareInput() 

    } 

    public void prepareInput() throws Exception { 
     assetProps = new HashMap<String,String>(); 
    } 

Nun wird das Objekt nicht null ist, kann ich Syntax ähnlich wie die Verwendung folgende in der JSP -

Der Iterator zieht eine Reihe von Objekten aus dem Stapel und iteriert darüber. Der wichtige Teil ist der Abschnitt "name =", beachte die doppelt entflochtenen einfachen Anführungszeichen. Wenn die Seite gerendert wird, wird beispielsweise der Name des Eingabeelements - assetProps ['Screen Size']. Wenn die Seite übergeben wird, ist in der Methode "public void execute()" volume AssetProps vollständig ausgefüllt.

+0

Dank für die Erklärung, das half mir, eine ähnliche Situation zu lösen. Eine Randnotiz, für die Sie eigentlich nicht die Schnittstelle Preparable benötigen, können Sie die Map einfach initialisieren, wenn sie deklariert ist. – shakerlxxv

2

Hier ist ein weiteres Code-Snippet, das etwas ähnliches tut, falls es jemandem hilft.

<s:iterator value="storageIds" var="sids"> 
    <s:hidden name="%{'storageIds[\\'' + key +'\\']'}" value="%{#sids.value}"/> 
</s:iterator> 

Meine Aktion hat ein Map<String,String> namens storageIds

Wenn eine Karte, Schlüssel und Wert Entschlossenheit auf die Map.Entry Eigenschaften iterieren.

0

Versuchen Sie dies. Funktioniert perfekt für mich

<s:iterator value="configMap" id="daa"> 
    <s:hidden name="%{'configMap[\\'' + key +'\\']'}" value="%{#daa.value}" /> 
</s:iterator>