gpt4 book ai didi

tapestry - 编码器 component in Tapestry

转载 作者:行者123 更新时间:2023-12-04 17:54:15 25 4
gpt4 key购买 nike

我有一个页面正在显示某些客户端的详细信息。我正在使用t:loop显示一些数据。在t:loop中,我只是传递sourcevalue。到目前为止一切顺利,我的页面工作正常。但是,当我尝试提交Page时,突然给了我异常(exception)。

“Could not find a coercion from type java.lang.String to type [addressUsageValue] Available coercions:……….”



下面是示例代码
<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()方法,目的是什么?

第三-当我提交Page时,为什么需要表单编码器?

最佳答案

formStateencoder参数解决了以下问题:提交表单时,如何确保表单中的值进入它们打算使用的对象?

如果您要遍历的集合在表单的呈现和表单提交之间没有变化,那么最简单的解决方案是设置formState="iteration"(很好地解释了in the docs)。

但是,如果集合可以在渲染和提交之间更改,则必须对有关哪个循环迭代是哪个对象的信息进行编码。这是通过ValueEncoder完成的(再次,在its documentation中很好地解释了)。常见的实现方式可以是例如在呈现时将数据库ID编码为表单(toClient()),并在提交表单时将其从数据库加载回实体(toValue())。

所有这些都在Loop component documentation that you found中得到了很好的解释。

关于tapestry - 编码器<t :loop> component in Tapestry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11151518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com