我创建了一个我在表单中使用的组件。
<!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
公共类VehicleComponent {
@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捕获值,然后在提交时构建对象,如果我想清除组件字段?
答案 0 :(得分:0)
您可以尝试在vehicle = new Vehicle();
中设置onSuccessFromForm()
。
或者,您可以将vehicle.vrm
更改为vehicle?.vrm
,然后在vehicle = null
中设置onSuccessFromForm()
。