在我的行動類我想要一個字符串的地圖。而在我的tml中,我想用textfield訪問這張地圖。像綁定掛圖5
<t:form>
<t:textfield value="myMap['key1']"/>
<t:textfield value="myMap['key2']"/>
...
我不堅持語法,但有什麼這樣的事情,目前在tapestry?如果沒有,我需要以最簡單的方式創建這種轉換?類型強制?自定義組件?我開始學習掛毯,所以請隨意詳細:)
在我的行動類我想要一個字符串的地圖。而在我的tml中,我想用textfield訪問這張地圖。像綁定掛圖5
<t:form>
<t:textfield value="myMap['key1']"/>
<t:textfield value="myMap['key2']"/>
...
我不堅持語法,但有什麼這樣的事情,目前在tapestry?如果沒有,我需要以最簡單的方式創建這種轉換?類型強制?自定義組件?我開始學習掛毯,所以請隨意詳細:)
您將需要在您的java類中創建一個存取方法。
最簡單的方法是添加一個方法:
getMapValue(String key){...}
你就可以改變你的TML使用
value="getMapValue('key1')"
這種方式,只讀,所以我不能在文本字段中使用它,我可以?文本字段需要一個帶有單個參數的setter - 值。所以沒有地方通過密鑰 – piotrek
您應該能夠遍歷按鍵設置如下:
<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>
你必須在存儲當前的地圖項,並將獲得的電流值的類文件添加一些代碼:(這個答案是從我earlier answers一個改編)
@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);
}
這種方式,我必須遍歷整個地圖,即使我只想要幾個鍵。我也不能添加不在地圖 – piotrek
好吧,我想通了。我做了一個簡單的組件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參數到文本框等
thx中的鍵的條目!比我的解決方案好得多。但需要更多的工作:( – piotrek