gpt4 book ai didi

java - Apache Wicket 中一个类的多个路径

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:04 26 4
gpt4 key购买 nike

我有 Wicket 应用程序,在我做的 WebApplication 中:

public class AppStart extends WebApplication{

public AppStart(){
}

@Override
protected void init(){
super.init();
mountPage("/index.html", StandardPage.class);
mountPage("/another.html", StandardPage.class);
}
}

但是当我访问/index.html 时,我被重定向到/another.html 页面。一直在想在创建页面的时候会实例化StandardPage.class,所以这两个页面会被StandardPage.class的两个独立对象处理?

最佳答案

是的,这是真的。 Wicket 有自己的复杂机制来处理 URL 以及如何将浏览器重定向到特定目标。在 Wicket 中使用两个或多个不同的路径来挂载相同的页面类是不知道的(默认情况下)。

解决方案 1

如果您真的想在不同的 URL 上获得相同的功能,使用简单的后代

public class StandardPage2 extends StandardPage {
//... define the same constructors from StandardPage
}

您的代码

@Override
protected void init(){
super.init();
mountPage("/index.html", StandardPage.class);
mountPage("/another.html", StandardPage2.class);
}

别忘了正确使用

setResposonsePage(StandardPage.class); 

setResposonsePage(StandardPage2.class);

解决方案 2

以下示例显示了如何将页面参数用作 URL 的一部分。假设数据库中有用户,每个用户都有自己的页面,可以通过唯一的 URL 访问。此外,每个用户都可以执行一些可选操作,并且操作名称曾经包含在 URL 中,并且还有一些其他页面安装到他们自己的 URI。所以 URI 应该看起来像

/home 
/login
/logout
/martin
/martin/edit
/martin/detail
/petr
/petr/edit
/petr/detail
/
/texts/my-super-article-1
/texts/my-super-article-2
/events/actual
/fotos/from-my-first-holiday
/fotos/from-my-second-holiday

在这种情况下,可以使用 Wicket 中曾经实现的默认 MontedMapper。映射是

mountPage("/home", HomePage.class);
mountPage("/login", LoginPage.class);
mountPage("/logout", LogoutPage.class);
mountPage("/${nick}/${action}", UserProfilePage.class);
mountPage("/texts/${page}", TextPages.class);
mountPage("/events/${page}", EventPages.class);
mountPage("/fotos/${page}", FotoPages.class);

并且您必须使用 PageParameters 实现 UserProfilePage 及其构造函数

public class UserProfilePage extends WebPage {

public UserProfilePage(PageParameters pageParameters) {
super(pageParameters);
StringValue nick = pageParameters.get("nick");
StringValue action = pageParameters.get("action");
// any code
String nickName = nick.toString();
boolean defaultAction = action.isEmpty(); // default action
}

}

解决方案 3

您也可以覆盖 IRequestMapper 和其他一些类,但我认为这太复杂了,在您的情况下没有必要。

关于java - Apache Wicket 中一个类的多个路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20775425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com