0

JSP から Struts2 アクションのマップ プロパティを設定したいと考えています。使用すべきデータ名の形式は何ですか? 最初は Map<String, String> に値を設定することに興味がありましたが、将来的には、DomainClass が独自のプロパティを持つ Map<String, DomainClass> に値を設定することに興味があります。

4

3 に答える 3

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 はマップをインスタンス化できないため、ユーザー次第です。私のアクションでは、Preparable インターフェイスを実装しますが、次のように「public String input()」メソッドを実行する前にインスタンス化します -

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 が完全に入力されます。

于 2009-06-24T15:28:50.300 に答える
2

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

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

私のアクションにはMap<String,String>名前がありますstorageIds

マップを反復処理すると、キーと値がMap.Entryプロパティに解決されます。

于 2011-05-04T13:14:08.907 に答える