gpt4 book ai didi

java - 为什么 FormComponentPanels 中的共享模型不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:21 25 4
gpt4 key购买 nike

我真的很想理解为什么当 TextField 及其周围的 FormComponentPanel 使用相同的模型时,以下代码的模型对象始终为 null:

public class MyPanel extends FormComponentPanel<String> {

private TextField<String> _field;

public MyPanel(String id, IModel<String> model) {
super(id, model);
_field = new TextField<String>("field", model);
add(_field);
}


}

我知道我可以通过覆盖 Panel 的 convertInput 来解决这个问题,这在 Javadocs 中有描述:

@Override   
protected void convertInput() {
setConvertedInput(_field.getConvertedInput());
}

我真的很想了解为什么 TextField 的更改没有按照我期望的方式更新模型:将模型对象设置为用户的输入。

最佳答案

正如“Wicket in Action”所说:

The convertInput method is called during the first phase of component validation (before any validators are executed). Implementations should parse user input and either set the converted input using setConvertedInput or report that the input couldn’t be interpreted directly. A form component panel typically doesn’t receive user input directly. But because its nested components do, and because it wants to update its own model value accordingly, we override this method.

在您的示例中,最初将调用文本字段的 convertInput 方法。它将使用正确的值更新共享模型。

然后调用表单组件面板的convertInput方法。但是因为表单组件面板不直接接收任何输入,所以它的 getInputAsArray 方法将返回 null(如果输入像您的情况一样可以为 null)。所以共享模型将再次更新,这次是空值,最后模型的结果值为空。

关于java - 为什么 FormComponentPanels 中的共享模型不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13258661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com