2

我在 Tomcat7 中部署了一个 wicket 应用程序(6.10 版):myapp.war

web.xml 具有以下配置:

<filter>
    <filter-name>myapp.wicket</filter-name>
    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
    <init-param>
        <param-name>applicationClassName</param-name>
        <param-value>com.myapp.MyWebApp</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>myapp.wicket</filter-name>
    <url-pattern>/pages/*</url-pattern>
</filter-mapping>

所以我可以访问检票口页面

http://myhost/myapp/pages/HomePage

直到这里一切正常。我像这样安装我的页面MyWebApp.init()

mountPackage("/", HomePage.class);

并且我可以访问 HomePage 以及上面指定的同一包中的其他页面。

当我尝试在不同的包 com.myapp.mobile 中挂载页面时,问题就出现了如果我使用与以前相同的策略,它根本不起作用:

mountPackage("/m/", MobilePage.class);

当我尝试访问 MobilePage 时,出现异常:

http://myhost/myapp/pages/m/MobilePage

WicketObjects.resolveClass WARNING  Could not resolve class [com.myapp.m]
java.lang.ClassNotFoundException: com.myapp.m

对于同一个包中的任何其他页面也是如此(它们都是可收藏的)。但是,如果我一一安装它们:

mountPage("/m/MobilePage", MobilePage.class);
mountPage("/m/MobilePage2", MobilePage2.class);

,或者如果我将它们安装在根目录中,它可以工作:

mountPackage("/", MobilePage.class);

在前一种情况下,使用myapp/pages/m/MobilePage和 在没有 /m/ 的情况下访问它们:myapp/pages/MobilePage

所以我的问题是(很抱歉,解释太长了):如何在所需路径下安装新包(在这种情况下是 /m/)?

谢谢

4

2 回答 2

1

我个人没有使用过这种语法,但你可以尝试一下:

public final void mount(String path, PackageName packageName)

这似乎解决了您正在寻找的内容。

你会这样写:

public final void mount("/m/", PackageName.forClass(MobilePage.class));

问候

于 2013-09-25T12:31:05.807 回答
1

不要使用'/m/'路径调用方法,不要使用最后一个斜杠,所以

mountPackage("/m", MobilePage.class);

工作得很好...

为此失去了一天:(

于 2013-09-25T16:21:45.717 回答