所以,我看到有人问这个问题,但我会多写一点代码:
在什么地方放置初始化模型的代码的最佳位置 页面呈现。我知道有五个选项,但是你通常把它放在哪里 这种类型的初始化?
在页面呈现之前,我想在我的 bean/model 中设置数据 某些属性可能仅特定于该页面。
我认为有五个选择。
在构造函数中添加初始化逻辑。这可能有效,但我 不知道是否为每个页面调用调用构造函数(例如,当 该页面已反序列化)。
在onBeforeRender中添加初始化逻辑。这很有效,并且需要每个人 要求?但这是最好的地方吗?或者配置上? onInitialize。
然后,您是否使用更新后的值调用 setDefaultModel/setDefaultObject?
在“load”或“getmodel”方法中添加初始化逻辑 LoadableDetachableModel 类?
在上一页的onSubmit方法或onEvent上添加init。 (onSubmit() { initBeanInSession();设置响应页面(); }
将模型传递给面板或页面构造函数(使用页面参数?)
这些最佳实践中是否有任何一个比另一个更受青睐?
(a) 具有 Loadable 可拆卸模型的页面构造函数代码:
MyPage.java:
...
final Form form = new Form(FORM, new
CompoundPropertyModel(new LoadableDetachableModel() {
private static final long serialVersionUID = 1L;
@Override
protected MyBean load() {
final MyBean app = (MyBean) Session.get().getApp();
?????????????
?????????????
initialize here???????
?????????????
return app;
}
};
});
???
onBeforeRender() {
?? Add initiailize here
final MyBean app = (MyBean) Session.get().getApp();
app.setData(doSomeBusinessLogicHere)
}
还是initModel?
/**
* Called once per request on components before they are about to be rendered.
* This method should be used to configure such things as visibility and enabled flags.
*/
@Override
protected void onConfigure() {
super.onConfigure();
// Call business logic and properly set email address.
}
最佳答案
1 Add initialization logic in the constructor. This may work, but I don't know if the constructor is called for every page call (E.g. when the page is deserialized).
只有在调用new
时才会调用构造函数。反序列化绕过对象的正常构造(它只分配足够的内存,然后直接加载数据 - 前提是您没有为序列化/反序列化创建任何特殊代码)。使用调试器可以轻松检查此类假设。
因此,如果您想使用模型对象为每个请求执行操作,那么构造函数是错误的位置。
2 Add init logic in onBeforeRender. This works and it called for every request? But is it the best place? Or onconfigure? onInitialize.
onBeforeRender
仅针对可见组件(针对每个请求)调用。对于每个请求,所有组件(无论可见性如何)都会调用新的 onConfigure
事件。 onInitialize
仅在将组件添加到其父组件后调用(即仅调用一次)。
您的问题很难给出答案,因为尚不清楚您是否打算覆盖用户在输入字段中已提供的值。如果是这样,那么您可以在 LoadableDetachableModel
的 load
方法中执行此操作。如果没有,那么您应该在 onInitialize
中执行此操作,或者可能在 App
对象的构造函数中设置这些默认值。
对于此类设计问题没有金锤子——它总是取决于。
关于java - Wicket 口中的业务逻辑,其中有一些推荐的放置逻辑的位置(加载逻辑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5176751/