0

我创建了一个在表单中使用的组件。

 <!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 捕获值然后在提交时构建对象吗?

4

1 回答 1

0

您可以尝试设置vehicle = new Vehicle();onSuccessFromForm(). 或者您可以将您的更改vehicle.vrmvehicle?.vrm然后设置vehicle = nullonSuccessFromForm()

于 2013-06-26T01:27:22.347 回答