Wicket:是否可以根据添加面板的页面显示面板的组件?

时间:2012-06-25 16:13:17

标签: templates wicket panel wicket-1.5 webpage-rendering

我对Wicket很新,所以请原谅我这是一个简单的任务。我试图寻找例子但是空洞。

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

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

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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);
    }
}

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

答案 2 :(得分:0)

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

我不建议您将面板连接到显示页面;这将引入循环依赖,并且每次要在新类型的页面上重用面板时,您必须添加对新页面的另一个检查。相反,只需使面板可配置(最好通过传递boolean addressVisible等参数在构造时执行此操作。