在我的动作类中,我希望有一个字符串映射。在我的tml中我想用textfield访问这个地图。
之类的东西<t:form>
<t:textfield value="myMap['key1']"/>
<t:textfield value="myMap['key2']"/>
...
我不坚持语法,但目前在tapestry中有这样的东西吗?如果没有,我需要以最简单的方式创建这样的转换?类型胁迫?定制组件?我开始学习挂毯了,所以请随意大肆宣传:)
答案 0 :(得分:5)
答案 1 :(得分:3)
@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参数传递给文本字段等等
答案 2 :(得分:2)
您需要在java类中创建一个访问器方法。
最直接的方法是添加一个方法:
getMapValue(String key){...}
然后您可以更改您的tml以使用
value="getMapValue('key1')"
答案 3 :(得分: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);
}
(此答案改编自我earlier answers之一。)