gpt4 book ai didi

java - 如果在局部变量中使用了 wicket 模型,我是否必须分离它们?

转载 作者:行者123 更新时间:2023-11-30 05:56:36 25 4
gpt4 key购买 nike

我在我的 wicket 应用程序中使用 PropertyModel 和Compoundpropertymodel。我将它们用作局部变量而不是页面类的成员。当模型位于本地时,我是否必须重写 onDetach() 函数才能分离模型?或者只是将成员变量序列化到 session 中?

示例:

TextField<String> title = new TextField<String>("title", new PropertyModel<String>(position, "title"));
title.setRequired(true);
form.add(positionTitle);

最佳答案

我不清楚为什么要分离 TextField 的模型,因为 TextField 需要一个模型对象来写入提交的表单值。如果您分离position如果来自 PropertyModel,则在用户提交表单后,TextField 将没有地方写入其“标题”值。您可能想要提供有关 position 的更多详细信息是,它是从哪里加载的,以及为什么需要在请求周期之间分离它。常见的做法是为表单组件提供一个安全可序列化的模型对象来写入它们的值。

如果您确实需要在每个请求结束时分离 PropertyModel 的模型对象,请将 PropertyModel 链接到 LoadableDetachableModel。 LDM 将根据您提供的 load() 为每个请求周期加载新的模型对象。方法,然后在分离时自动清空其对该模型对象的引用,以防止序列化模型对象。如果您使用LoadableDetachableModel<Position>作为 PropertyModel 的模型对象,那么 PropertyModel 将自动分离 LoadableDetachableModel,这足以避免序列化 position对象。

请注意,您不需要显式调用 detach()在像你的例子中的模型上; Wicket 自动分离页面层次结构中所有组件的默认模型。我所说的“默认模型”是指通过 super(...) 传递的模型。链并最终成为 model Component(...) 之一的参数构造函数。

请求处理结束时,主页调用 detach()其子级(这些子级对其子级调用 detach() 等等)。此方法(在 Component 中定义)调用 detachModels() ,这又会分离组件的默认模型。

通常使用多个模型的标准 Wicket 组件将在 detachModels 期间分离其他模型。 。例如,如果您向 DropDownChoice 传递一个用于获取/设置所选值的模型和一个选项列表的模型,您会注意到 DropDownChoice 在每个请求结束时自动分离这两个模型。这是因为AbstractChoice#detachModel()查找并分离 choices型号(如果已设置)。

链接模型也会分离其链接模型,例如,如果您有

Form<User> userForm = new Form<User>("userForm", new CompoundPropertyModel<User>(new DetachableUserModel(...));

然后,CompoundPropertyModel 将通过 detachModels 自动分离,这将依次分离 DetachableUserModel。

您需要担心手动分离模型的情况是,您在代码中使用了既不是默认的 model 的其他模型。某些组件,也没有链接到另一个模型中。如果您要创建一种具有多个模型对象的新型组件,这可能是一个问题。

关于java - 如果在局部变量中使用了 wicket 模型,我是否必须分离它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891312/

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