Hyperlink 导叶和可重用链接

Hyperlink 导叶和可重用链接,hyperlink,wicket,Hyperlink,Wicket,'我正在尝试创建一个可重用的链接类来扩展链接。我有一个包含7个菜单项的网页,我正在为我的应用程序使用继承。我想创建一个可重用的链接类来缩短代码的长度 到目前为止,当我在oninitialize()中添加(新链接…)作为匿名类时,该链接创建并运行良好 当我硬编码要转到的新页面实例,并将其分配给“页面”引用,然后将其传递到setResponsePage()时,自定义链接类(它是基本页面的内部类)工作正常 问题是,我正在尝试将对象一般地传递给构造函数。当我将它传递给构造函数并尝试进入新页面时,我得到一

'我正在尝试创建一个可重用的链接类来扩展链接。我有一个包含7个菜单项的网页,我正在为我的应用程序使用继承。我想创建一个可重用的链接类来缩短代码的长度

到目前为止,当我在oninitialize()中添加(新链接…)作为匿名类时,该链接创建并运行良好

当我硬编码要转到的新页面实例,并将其分配给“页面”引用,然后将其传递到setResponsePage()时,自定义链接类(它是基本页面的内部类)工作正常

问题是,我正在尝试将对象一般地传递给构造函数。当我将它传递给构造函数并尝试进入新页面时,我得到一个会话已过期

我尝试过为类使用泛型,也尝试过将页面引用声明为参数值。我应该使用某种模型吗?或者有人能举例说明如何做到这一点吗?我想能够使用这个自定义链接类添加7个菜单项的新链接,每个菜单项都有自己的类

有效的代码:

add(new Link("userPageLink")
{
    public void onClick()
    {
        pageTitle = "User";
        Page next = new UserPage();
        setResponsePage(next);
    }
});
修改代码,使页面在单击时过期:

public class CustomLinkToNewPage extends Link
{
   private String title;
   private Page next;

   public CustomLinkToNewPage(String id, String title, Page newPage) 
   {
      super(id);

      next = newPage; 
      this.title = title; 
   }

   @Override
   public void onClick() 
   {
      SSAPage.pageTitle = title;
      setResponsePage(next);  
   }   
}

这可能是因为在第一个版本中,当调用Link对象的onClick方法时,您将页面对象装箱,而在第二个版本中,页面对象是在页面构造时创建的(就在前面)

如果在实例上传递responsepage的Pageclass,则可能会得到结果

这些组件的组件特性设置器

public final <C extends IRequestablePage> void setResponsePage(java.lang.Class<C> cls, PageParameters parameters)
public final void setResponsePage(java.lang.Class cls,PageParameters)
或者没有参数

public final <C extends IRequestablePage> void setResponsePage(java.lang.Class<C> cls)
public final void setResponsePage(java.lang.Class cls)
有关更多信息,请参阅。

我最终做了以下工作:

public class CustomLinkToNewPage<T extends SSAPage> extends Link
public类CustomLinkToNewPage扩展链接
SSAPage是我扩展网页的基本页。。。因此,传入此类构造函数的任何对象也必须扩展SSAPage

public CustomLinkToNewPage(String id, Class<T> name) 
public CustomLinkToNewPage(字符串id、类名)
然后我将.class引用传递给该对象,并使用反射创建了该对象的新实例。。然后将该实例设置为Page,并在onClick中将其传递给setResponsePage。很好地工作了,因为我不知道怎么用Nicktar的方式。因此,这是一个替代方案,以防其他人遇到这个问题