1

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

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

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

问题是,我试图通过构造函数传递对象。当我通过构造函数传递它并尝试前往新页面时,我得到一个会话已过期。

我已经尝试为该类使用泛型,并且我还尝试将 Page 引用声明为参数值。我应该使用某种模型吗?或者有人可以提供一个如何做到这一点的例子吗?我希望能够使用此自定义链接类为 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);  
   }   
}
4

2 回答 2

0

这可能是因为在第一个版本中,您在调用 Link 对象的 onClick 方法时创建了 Page 对象,而在第二个版本中,Page 对象是在 Page-construction(更早的方式)上创建的。

如果您将响应页面的 Pageclass 传递给实例,则可能会得到结果。

这些的组件功能设置器

public final <C extends IRequestablePage> void setResponsePage(java.lang.Class<C> cls, PageParameters parameters)

或不带参数。

public final <C extends IRequestablePage> void setResponsePage(java.lang.Class<C> cls)

有关详细信息,请参阅Javadoc

于 2013-07-25T16:44:39.283 回答
0

我最终做了:

public class CustomLinkToNewPage<T extends SSAPage> extends Link

SSAPage 是我扩展 WebPage 的基本页面...所以传入此类的构造函数的任何对象也必须扩展 SSAPage。

public CustomLinkToNewPage(String id, Class<T> name) 

然后我传入对象的 .class 引用,并使用反射创建对象的新实例。然后将该实例设置为 Page,并将其传递给我的 onClick 中的 setResponsePage。工作得很好,因为我不知道如何按照 Nicktar 的方式去做。所以这是一个替代方案,以防其他人遇到这个问题。

于 2013-08-09T14:08:10.513 回答