我创建了一个在表单中使用的组件。
<!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>
还有java
公共类车辆组件{
@Property
Vehicle vehicle;
VehicleComponent() {
vehicle = new Vehicle();
}
public void clear() {
vehicle = new Vehicle();
}
}
问题是,在我提交该组件所属的表单后,文本字段中的值仍然存在 - 我希望将其从字段中清除。我使用 Sting、int 等属性的其他更简单的组件都清楚。
componentResources.discardPersistentFieldChanges() 不适用于车辆组件,也不能直接调用上述 clear 方法。我觉得如果我要将 @persist 添加到车辆对象,那么 componentResources.discardPersistentFieldChanges() 会起作用 - 但我不能,因为你不能实例化 @persist-ed 对象。如果我删除@Property,那么我会得到一个空指针。
关于如何在持久化后从我的组件中的字段中清除对象值的任何建议?如果我想清除组件字段,我唯一的选择是先使用@Persist 捕获值然后在提交时构建对象吗?