首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Wicket:网站层次结构

Wicket:网站层次结构
EN

Stack Overflow用户
提问于 2012-01-26 00:06:49
回答 1查看 247关注 0票数 0

这是一个一般性的问题:如何在wicket中构建我的网站的所有页面和组件(这里是面板)。我想展示我的尝试,并希望有人能给我建议,这是一个好的方法,如果有更好的方法。

我的结构如下:

根: HomePage

Page1扩展了HomePage

Page2扩展了HomePage

Page3扩展了HomePage

页面包装内容和它自己的导航。他们在HomePage.html中使用wicket child进行初始化。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-26 18:00:44

回答你的问题..。这里假设您使用的是Wicket 1.4.x。

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

代码语言:javascript
运行
复制
RootPage - common headers/footers, javascript imports
AbstractWritePage extends RootPage - for anything regarding authoring
AbstractBrowsePage extends RootPage - browsing
AbstractReadPage extends ReadPage - reading

然后,我实现了一些类似的东西:

代码语言:javascript
运行
复制
FullLibraryPage extends AbstractBrowsePage
FilterSearchPage extends AbstractBrowsePage

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

其次,您的面板组件变为可见/不可见。如果您使用的是Wicket 1.4.x,您应该查看每个面板的可重写方法onConfigure()。在此面板中,可以设置可见性,如下所示:

代码语言:javascript
运行
复制
@Override
protected void onConfigure() {
    super.onConfigure();
    setVisible(!navTriggered);

}

其中navTriggered是驻留在包含页中的布尔值。然后,您的链接可以做一个简单的操作:

代码语言:javascript
运行
复制
@Override
protected void onClick(AjaxRequestTarget target) {
    navTriggered = false;
    target.addComponent(/* Appropriate panels; see below for multiples */);
}

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

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

代码语言:javascript
运行
复制
public class Panel1 implements MyPanelGroup { ... }
public class Panel2 implements MyPanelGroup { ... }

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

希望这能回答一些问题:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9005903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档