Java 渲染分区时,“选择模型”将丢失

Java 渲染分区时,“选择模型”将丢失,java,tapestry,Java,Tapestry,使用Tapestry更新选择字段上的渲染时出现问题 我想禁用两个字段(1个文本字段和1个选择字段),具体取决于我在另一个字段(也是选择字段)中选择的内容。我想立即渲染禁用的字段,因此我使用Tapestry Zone系统来执行此操作 但是,当我从“FrootOrvegetableSelect”列表中选择一个项目时,选择字段会出现以下异常: 以下是我在tml页面中的代码: <t:zone t:id="fruitsForEveryOneZone" update="s

使用Tapestry更新选择字段上的渲染时出现问题

我想禁用两个字段(1个文本字段和1个选择字段),具体取决于我在另一个字段(也是选择字段)中选择的内容。我想立即渲染禁用的字段,因此我使用Tapestry Zone系统来执行此操作

但是,当我从“FrootOrvegetableSelect”列表中选择一个项目时,选择字段会出现以下异常:

以下是我在tml页面中的代码:

<t:zone t:id="fruitsForEveryOneZone" update="show">
            <tr>
                <td> <t:select
                    t:id="fruitName" t:model="fruitNames"
                    value="fruit?.fruitName" 
             disabled="getDisabledFruitField()" />
                </td>
                
                <td><t:textfield t:id="numberOfFruits"
                    value="fruit?.quantity"
                    disabled="getDisabledFruitField()" />
                </td>
            </tr>
</t:zone>

如果我限制区域,使其仅接受文本字段输入,则效果良好(除了我的选择从未被禁用)。由于某种原因,我选择的字段中的“模型”在此过程中丢失。你知道为什么会发生这种情况,以及我如何避免这个问题吗?

这段代码没有显示如何在java类中声明“水果名”。我猜“水果名”是一个变量,它只是丢失了。您应该用
@Persist
注释“水果名”,这应该可以实现这个技巧,或者将“水果名”声明为一个方法(
getFruitNames()
)。

这段代码没有显示如何在java类中声明“水果名”。我猜“水果名”是一个变量,它只是丢失了。您应该使用
@Persist
注释“水果名”,这应该可以实现这个技巧,或者将“水果名”声明为一个方法(
getFruitNames()

<t:zone t:id="fruitsForEveryOneZone" update="show">
            <tr>
                <td> <t:select
                    t:id="fruitName" t:model="fruitNames"
                    value="fruit?.fruitName" 
             disabled="getDisabledFruitField()" />
                </td>
                
                <td><t:textfield t:id="numberOfFruits"
                    value="fruit?.quantity"
                    disabled="getDisabledFruitField()" />
                </td>
            </tr>
</t:zone>
@OnEvent(component = "fruitOrVegetableSelect", value = EventConstants.VALUE_CHANGED)
public Object updateFruitOrVegetable(Plant plant)
{
    if (plant.getName().equals("Fruit"){
        this.disabledFruitField=false;
    else {
        this.disabledFruitField=true;
    }
    return new MultiZoneUpdate("fruitsForEveryOneZone", fruitsForEveryOneZone.getBody());
}