I have one Page which is displaying details of some Client. I am using t:loop
to display some data. In t:loop
I am just passing source
and value
. So far so good, my page is working fine. But when I try to submit the Page it suddenly give me the Exception.
“Could not find a coercion from type java.lang.String to type [addressUsageValue] Available coercions:……….”
Below is the sample code
<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>
I did some goggling and find below references.
http://tapestry.apache.org/5.3.3/apidocs/org/apache/tapestry5/corelib/components/Loop.html https://issues.apache.org/jira/browse/TAP5-609
So I have created encoder for Loop. Below is the sample code. In below toClient()
method I have randomly returned any value and in toValue()
method I am returning 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;
}
};
Now my code is working fine and I am able to submit the form.
Here my doubt comes
First – I am not able to understand why encoder is required when using loop?? And if it is required to submit the form then why it is not Mandatory parameter??
Second – I have just implemented the Encoder without any logic. I am not able to understand where toValue() and toClient() method is used and what is the purpose?
Third – when I submit the Page why form required Encoder??