我有一个页面显示某些客户的详细信息。我t:loop
用来显示一些数据。在t:loop
我只是路过source
和value
。到目前为止一切顺利,我的页面运行良好。但是当我尝试提交页面时,它突然给了我异常。
“找不到从类型 java.lang.String 到类型 [addressUsageValue] 的强制转换可用的强制转换:…………。”</p>
下面是示例代码
<t:loop source="addressUsageInfo" value="addressUsageValue">
<tr>
<td>${addressUsageValue?.usage}</td>
<td>${addressUsageValue?.address}</td>
<td>${addressUsageValue?.postCode}</td>
<td>${addressUsageValue?.city}</td>
<td>${addressUsageValue?.country}</td>
</tr>
</t:loop>
我做了一些护目镜并找到以下参考资料。
http://tapestry.apache.org/5.3.3/apidocs/org/apache/tapestry5/corelib/components/Loop.html https://issues.apache.org/jira/browse/TAP5-609
所以我为 Loop 创建了编码器。下面是示例代码。在下面toClient()
的方法中,我随机返回了任何值,在toValue()
方法中我返回了 null。
private final ValueEncoder<DtoAddressUsageInfo> addressUssageEncoder =
new ValueEncoder<DtoAddressUsageInfo>() {
public String toClient(DtoAddressUsageInfo value) {
return String.valueOf(value.getUsage());
}
public DtoAddressUsageInfo toValue(String clientValue) {
return null;
}
};
现在我的代码工作正常,我可以提交表单了。
我的疑问来了
首先——我不明白为什么在使用循环时需要编码器?如果需要提交表单,那么为什么它不是强制参数?
第二——我刚刚实现了没有任何逻辑的编码器。我无法理解 toValue() 和 toClient() 方法的使用位置以及目的是什么?
第三——当我提交页面时,为什么表单需要编码器?