这是一个一般性的问题:如何在wicket中构建我的网站的所有页面和组件(这里是面板)。我想展示我的尝试,并希望有人能给我建议,这是一个好的方法,如果有更好的方法。
我的结构如下:
根: HomePage
Page1扩展了HomePage
Page2扩展了HomePage
Page3扩展了HomePage
页面包装内容和它自己的导航。他们在HomePage.html中使用wicket child进行初始化。
现在,当我为Page1定义一个新的面板时,我也必须为它定义一个链接。对于链接onClick(),我将它引用的面板设置为可见,将所有其他面板设置为不可见。我还必须在Page1上定义面板,当我导航到Page1时会显示该面板。所有其他面板都不可见。
这是一个很好的尝试,还是有更好的方法?现在我初始化每个面板,并保持它们不可见。
发布于 2012-01-26 18:00:44
回答你的问题..。这里假设您使用的是Wicket 1.4.x。
首先,您可以有多个级别的Page类,通常模仿设计和功能的重叠。例如,假设您有一个应用程序,用户可以在其中“编写”、“浏览”和“阅读”用户创建的书籍。
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从长远来看,它会变得复杂,但功能非常强大。
其次,您的面板组件变为可见/不可见。如果您使用的是Wicket 1.4.x,您应该查看每个面板的可重写方法onConfigure()。在此面板中,可以设置可见性,如下所示:
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(!navTriggered);
}其中navTriggered是驻留在包含页中的布尔值。然后,您的链接可以做一个简单的操作:
@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等)。
希望这能回答一些问题:)
https://stackoverflow.com/questions/9005903
复制相似问题