フォームで使用するコンポーネントを作成しました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<noscript class="js-required">
${message:javascript_required}
</noscript>
<t:content>
<table>
<tr>
<h2>Vehicle:</h2>
</tr>
<tr>
<td>
VRM:
</td>
<td>
<input t:type="TextField" t:value="vehicle.vrm" t:id="vrmTextField" t:validate="minlength=3,maxlength=15" size="30"/>
</td>
</tr>
</table>
</t:content>
そして、ジャバ
public class VehicleComponent {
@Property
Vehicle vehicle;
VehicleComponent() {
vehicle = new Vehicle();
}
public void clear() {
vehicle = new Vehicle();
}
}
問題は、このコンポーネントが含まれるフォームを送信した後、テキストフィールドの値が残っていることです。フィールドからクリアしたいのです。Sting、int などのプロパティを使用する他の単純なコンポーネントはすべてクリアされます。
componentResources.discardPersistentFieldChanges() は車両コンポーネントでは機能せず、上記の clear メソッドへの直接呼び出しも機能しません。@persist を vehicle オブジェクトに追加すると、 componentResources.discardPersistentFieldChanges() が機能するように感じますが、@persist されたオブジェクトをインスタンス化できないため、できません。@Property を削除すると、null ポインターが得られます。
永続化後にコンポーネントのフィールドからオブジェクト値をクリアする方法について何かアドバイスはありますか? コンポーネントフィールドをクリアしたい場合、最初に @Persist を使用して値を取得し、送信時にオブジェクトを構築する唯一のオプションはありますか?