2009-04-12 11 views
0

JSPからStruts2アクションのマッププロパティを設定したいとします。私が使用すべきデータ名の形式は何ですか?当初はMap < String、String>の作成に興味がありましたが、将来は、DomainClassに独自のプロパティがあるMap < String、DomainClassの作成に興味があります。JSPのStruts2マップエントリのフィールド名

答えて

3

次のように私はプロパティと、作用を有する -

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

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

マップ上の値を設定するには、2つのステップが基本的に存在します。まず、OGNLはマップをインスタンス化できません。したがって、あなた次第です。私の行動では、私が調製可能インターフェイスを実装しますが、以下のように「公共の文字列の入力()」メソッドを実行する前に、それをインスタンス化 -

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>(); 
    } 

さて、オブジェクトがnullで、私はに似た構文を使用することができますJSPでの追従 -

<s:iterator value="asset.properties" var="prop"> 
    <sjx:textfield name="%{'assetProps[\\'' +#prop.propName +'\\']'}" 
      value="%{#prop.propValue}" 
      label="%{#prop.propName}" size="25"/> 
    </s:iterator> 

イテレータは、一連のオブジェクトをスタックから取り出して反復処理します。重要な部分は "name ="セクションで、二重にエスケープされた一重引用符に気付きます。こうすると、ページがレンダリングされるとき、入力要素の名前が(たとえば) - assetProps ['Screen Size']になります。ページが送信されると、 "public void execute()"メソッドの中で、assetPropsが完全に読み込まれます。

+0

これは私にも同様の状況を解決するのに役立ちました。あなたが実際にこれのための準備可能なインターフェイスを必要としない片側のメモは、あなたが宣言されたときにマップを初期化することができます。 – shakerlxxv

2

これは、誰かを助ける場合に備えて、同様のことをする別のコードスニペットです。

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

私のアクションがありMap<String,String>という名前

storageIdsMap.Entryプロパティへの地図、キーと値の決意を反復します。

0

お試しください。

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