一部のクライアントの詳細を表示しているページが 1 つあります。私は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
それで、ループ用のエンコーダーを作成しました。以下はサンプルコードです。以下の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;
}
};
これで私のコードは正常に動作し、フォームを送信できるようになりました。
ここで私の疑問が生じます
まず、ループを使用するときにエンコーダーが必要な理由を理解できませんか?? フォームを送信する必要がある場合、なぜ必須パラメーターではないのですか??
2 つ目 – ロジックなしで Encoder を実装したところです。toValue() および toClient() メソッドがどこで使用されているのか、またその目的は何なのか理解できません。
3 番目 – ページを送信するときに、なぜフォームにエンコーダーが必要なのですか??