1

我对 Wicket 很陌生,所以如果这是一个简单的任务,请原谅。我试图寻找例子,但空无一物。

这是场景。假设我有一个包含 25 个数据点(姓名、出生日期、地址、电话等)的客户信息面板。我想在网站的许多不同页面中重用这个面板。现在假设我在面板出现的 3 个不同页面上有以下标准:

  • 第 1 页 - 所有字段均可见且可编辑
  • 第 2 页 - 出生日期、性别、客户姓名可见但不可编辑,所有其他字段可见且可编辑
  • 第 3 页 - 出生日期和性别不可见,地址可见且可编辑,所有其他字段可见但不可编辑。

有没有办法使用相同的面板(以减少代码重复),但根据面板加载到的当前页面控制其组件?

谢谢你的帮助!

4

3 回答 3

6

我建议不要像这样隐式更改可见性和可编辑性。而是考虑根据组件的构造函数参数或自定义组件上的其他方法使其显式化。

于 2012-06-25T20:27:02.443 回答
1

在您的面板中,您可以调用该getPage()方法。您可以检查页面是否是某个类的实例,您可以通过调用来获取页面类getPageClass()

setVisible()可以通过调用方法或重写方法来设置面板内组件的可见性isVisible()。如果组件应该是可编辑的,可以通过使用isEnabled()方法(或覆盖setEnabled())来控制。

class YourPanel extends Panel {
    public YourPanel() {
        add(new TextField("name") {
                @Override
                boolean isVisible() {
                    return getPage().getPageClass().equals(Page2.class);
                }
        }
        TextField genderTextField = new TextField("gender");
        genderTextField.setVisible(!getPage().getPageClass().equals(Page3.class));
        add(genderTextField);
    }
}

如您所见,对于许多组件和许多情况,检查代码将非常复杂。如果您创建自定义面板,根据其可见性和可编辑性规则添加组件并控制整个面板(如果它们可见和/或可编辑),也许您可​​以获得更清晰的代码。

于 2012-06-25T20:17:58.140 回答
0

根据另一个答案,您可以调用setVisible()等来自定义外观。

但是,我不建议您将面板与显示页面耦合;这将引入循环依赖,并且每次您想在新类型的页面上重用面板时,您都必须为新页面添加另一个检查。相反,只需使面板可配置(最好在构建时通过传递参数来做到这一点,例如boolean addressVisible)。

于 2012-06-25T20:26:58.813 回答