3

私のアクションクラスでは、文字列のマップが必要です。私のtmlでは、テキストフィールドを使用してこのマップにアクセスしたいと考えています。何かのようなもの

<t:form>
    <t:textfield value="myMap['key1']"/>
    <t:textfield value="myMap['key2']"/>
...

私は構文を主張しませんが、現在タペストリーにこのようなものはありますか? そうでない場合、最も簡単な方法でそのような変換を作成するには何が必要ですか? タイプ強制?カスタムコンポーネント? 私はタペストリーを学び始めているので、気軽に冗長にしてください:)

4

4 に答える 4

6

もう 1 つのオプションは、独自の tml プレフィックスをバインドすることです。ここに接頭辞をバインドする例があります。

map次のように tml で値を取得できる独自のプレフィックスを作成しました。

${map:myMap.key1}
于 2012-06-18T19:17:36.497 に答える
3

わかりました、私はそれを理解しました。私は単純なコンポーネント MapField を行いました:

@Parameter(required=true)
Map<String, String> map;

@Parameter(required=true, allowNull=false, defaultPrefix = BindingConstants.LITERAL)
String key;

public String getMapValue() {
    return map.get(key);
}

public void setMapValue(String value) {
    map.put(key, value);
}

tml:

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
    <t:textfield value="mapValue"/>
</html>

それでおしまい。これで、他の tml で使用できるようになりました。

<t:mapField key="existingOrNot" t:map="myMap"/>

myMapページでは、プロパティとしてのみ必要です。

@Property @Persist Map<String, String> myMap;

おそらく、追加のすべてのhtmlパラメーターをテキストフィールドに渡すなど、やるべきことがもっとあります

于 2012-05-22T20:41:40.880 に答える
2

Java クラスにアクセサ メソッドを作成する必要があります。

最も簡単な方法は、1 つのメソッドを追加することです。

getMapValue(String key){...}

その後、使用するtmlを変更できます

value="getMapValue('key1')"

于 2012-05-20T23:11:34.207 に答える
1

次のようにキーセットをループできるはずです。

<form t:type="Form">
    <t:Loop t:source="myMap.keySet()" t:value="currentKey"> 
        <input type="text" t:type="Textfield" t:value="currentValue"/>
    </t:Loop>
</form>

クラス ファイルに、現在のマップ キーを格納し、現在の値へのアクセスを提供するコードを追加する必要があります。

@Property
private Object currentKey;

@Persist
@Property
private Map<String,String> myMap;

public String getCurrentValue() {
     return this.myMap.get(this.currentKey);
}

public void setCurrentValue(final String currentValue) {   
    this.myMap.put(this.currentKey, currentValue);
}

(この回答は、私の以前の回答の 1 つを基にしています。)

于 2012-05-22T11:15:00.587 に答える