gpt4 book ai didi

java - Wicket 破解了 ListView 的使用,有哪些替代方案?

转载 作者:行者123 更新时间:2023-12-02 12:25:46 25 4
gpt4 key购买 nike

Wicket 使用模型可能很麻烦。对于有状态页面来正确呈现对象,您需要使用大量样板代码、重写类来正确获取可见性状态等...一个简单的示例:

private IModel<FooBar> fooBarModel;
public MyPage() {
Label lbl1 = new Label("field1",
new PropertyModel<>(fooBarModel, "field1")) {
@Override public boolean isVisible() {
return fooBarModel.getObject().someCondition();
} }
add(lbl1);
/// Etc... same for dozen of other fields
}

我经常使用 ListView 的技巧帮助。同样的例子:

public MyPage() {
add(new ListView<FooBar>("content",
new SingleListModel<FooBar>(fooBarModel)) {
@Override protected void populateItem(...) {
FooBar fooBar = item.getModelObject();
// Code here gets simpler:
Label lbl1 = new Label("field1", fooBar.getField1());
lbl1.setVisible(fooBar.someCondition());
item.add(lbl1);
// Etc...
}
});
}

使用一个简单的实用程序类 SingleListModel ,变换 IModel<T>ListModel<T> ,有 1 个或 0 个元素,具体取决于 T 是否为 null:

public class SingleListModel<T>
extends LoadableDetachableModel<List<T>> {
private IModel<T> tModel;
public SingleListModel(IModel<T> tModel) {
this.tModel = tModel;
}
@Override
protected List<T> load() {
List<T> ret = new ArrayList<>(1);
T t = tModel.getObject();
if (t != null)
ret.add(tModel.getObject());
return ret;
}
}

这样做的一个很好的副作用是,如果fooBarModel,则标记中的整个“内容”元素将被隐藏。返回null ;无需特殊处理。

但是当我使用 ListView 时,所有这些对我来说都像是黑客攻击。以某种“不自然”的方式。

是否有更简洁的方法来获得相同的结果?标准的 wicket 框架?

最佳答案

您应该使用行为来避免此类重复。

public class MyBehavior extends Behavior {

private final MyModel model;

public MyBehavior(MyModel model) {this.model = model;}

@Override public void onConfigure(Component c) {
if (model.someCondition()) {
component.setVisible(false);
}
}
}

用法:

MyBehavior b = new MyBehavior(modelInstance);
component1.add(b);
component2.add(b);
// dozen more

关于java - Wicket 破解了 ListView 的使用,有哪些替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45485367/

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