Wicket:网站层次结构



这是一个关于的一般问题:如何在wicket中构建我的网站及其所有页面和组件(此处为面板)。我想展示我的尝试,希望有人能给我建议,无论这是一个好方法还是有更好的方法。

我的结构是这样的:

根目录:主页
Page1扩展了主页
Page2扩展了主页
Page3扩展主页

页面包装内容及其自己的导航。他们在HomePage.html中用wicket child获取init。

现在,当我为Page1定义一个新的Panel时,我还必须为它定义一个链接。对于onClick()链接,我将其引用的面板设置为可见,并将所有其他面板设置为不可见。此外,我必须在Page1上定义面板,当我导航到Page1时会显示该面板。所有其他面板都是不可见的。

这是一个好的尝试还是有更好的方法?现在我初始化ever面板,并保持它们不可见。

有机会回答您的问题。。。这假设您使用的是Wicket 1.4.x.

首先,您可以有许多级别的Page类,通常模仿设计和功能的重叠。例如,假设您有一个应用程序,其中有人"编写"、"浏览"one_answers"阅读"用户创建的书籍。

RootPage - common headers/footers, javascript imports
AbstractWritePage extends RootPage - for anything regarding authoring
AbstractBrowsePage extends RootPage - browsing
AbstractReadPage extends ReadPage - reading

然后,我实现了这样的东西:

FullLibraryPage extends AbstractBrowsePage
FilterSearchPage extends AbstractBrowsePage

从长远来看,它会变得复杂,但非常强大。

其次,你的面板组件是可见/不可见的。如果您使用的是Wicket1.4.x,那么您应该查看每个Panel的可重写方法onConfigure()。在该面板中,您可以设置可见性,如:

@Override
protected void onConfigure() {
    super.onConfigure();
    setVisible(!navTriggered);
}

其中CCD_ 3是驻留在包含页面中的布尔值。然后,你的链接可以做一个简单的:

@Override
protected void onClick(AjaxRequestTarget target) {
    navTriggered = false;
    target.addComponent(/* Appropriate panels; see below for multiples */);
}

这样做的好处是,可以由同一个布尔变量触发多个面板。在页面创建时创建所有面板并没有错,即使它们一开始是不可见的。

最后,如果您有很多面板需要更改/触发等,请考虑将IVisitor与标记接口配对。类似。。。

public class Panel1 implements MyPanelGroup { ... }
public class Panel2 implements MyPanelGroup { ... }

然后,您可以使用IVisitor访问页面中MyPanelGroup的每个实例,并对可见性进行操作(设置可见性,将其添加到AjaxRequestTarget中,等等)。

希望能回答一些问题:)

最新更新