2014-10-06 60 views
4

我在我的vaadin应用程序中有一个菜单栏,并且想添加一个项目以打开一个pdf文件是浏览器的新选项卡。我发现了一些解决方案,用按钮打开文件,但我必须使用MenuItem ...使用Vaadin从菜单栏打开pdf文件

MenuBar.Command commandHandler = new MenuBar.Command() { 

    @Override 
    public void menuSelected(MenuItem selectedItem) { 

     if (selectedItem.equals(menu_help)) { 
      openHelp(); 
     } 
    } 
}; 

... 

menu_help = menuBar 
      .addItem("", WebImageList.getImage(ImageList.gc_helpIcon), 
        commandHandler); 

... 


private void openHelp() { 
    // open pdf-file in new window 
} 

感谢您的帮助!

SOLUTION:

private void openHelp() { 
    final String basepath = VaadinService.getCurrent().getBaseDirectory().getAbsolutePath(); 

    Resource pdf = new FileResource(new File(basepath + "/WEB-INF/datafiles/help.pdf")); 
    setResource("help", pdf); 
    ResourceReference rr = ResourceReference.create(pdf, this, "help"); 
    Page.getCurrent().open(rr.getURL(), "blank_"); 
} 

注意:此代码的工作,但代码的结构是不完美的;-)更好的是存储“基本路径”和“PDF”的属性...

+0

你的类是Component'的'一个子类,或者更确切地说'AbstractClientConnector'。正如Kris所提到的,Component的一个子类仍然需要提供'setResource(“help”,pdf);'函数。因此,如果您在不是“组件”的类中定义“MenuBar”,则需要将其明确附加到组件。 – Abbas 2014-12-01 23:18:51

回答

4

有这里描述了类似的问题:How to specify a button to open an URL? 一种可能的解决方案:

public class MyMenuBar extends MenuBar { 

    ResourceReference rr; 

    public MyMenuBar() { 
     Resource pdf = new FileResource(new File("C:/temp/temp.pdf")); 
     setResource("help", pdf); 
     rr = ResourceReference.create(pdf, this, "help"); 
    } 

    private void openHelp() { 
     Page.getCurrent().open(rr.getURL(), "blank_"); 
    } 

    ... 
} 

AbstractClientConnector的setResource方法是受保护,因此这是你需要扩展一些Vaadin组件来使其工作。这就是为什么我在这里创建类MyMenuBar。如果您使用的是外部资源,则不需要使用setResource将其附加到任何组件,然后这不是必要的。

+0

感谢您的帮助!现在它工作了!我修改了你的解决方案,你不需要创建一个新的MenuBar类。帮助文件存储在WEB-INF文件夹中。见上面的代码 – Sheldon 2014-10-06 10:02:49

0

我用下面的代码做同样的事情:

private Component buildUserMenu() { 
     final MenuBar settings = new MenuBar(); 
     settings.addStyleName("user-menu"); 
     final User user = getCurrentUser();  
      settingsItem = settings.addItem("", new ThemeResource(
        "img/logo.png"), null);  
     updateUserName(null); 
     settingsItem.addItem(Lang.getMessage("menu.edit"), new Command() { 
      @Override 
      public void menuSelected(final MenuItem selectedItem) { 
       ProfilePreferencesWindow.open(user, false); 
      } 
     });  
     settingsItem.addSeparator(); 
     settingsItem.addItem(Lang.getMessage("menu.help"), new Command() { 
      @Override 
      public void menuSelected(final MenuItem selectedItem) { 
       Window help = new Window(); 
       help.setWidth("90%"); 
       help.setHeight("90%"); 
       BrowserFrame e = new BrowserFrame("PDF File", new ThemeResource("pdf/ayuda.pdf")); 
       e.setWidth("100%"); 
       e.setHeight("100%"); 
       help.setContent(e); 
       help.center(); 
       help.setModal(true); 
       UI.getCurrent().addWindow(help); 
      } 
     }); 
     settingsItem.addSeparator(); 
     settingsItem.addItem(Lang.getMessage("menu.logout"), new Command() { 
      @Override 
      public void menuSelected(final MenuItem selectedItem) { 
       BarsEventBus.post(new UserLoggedOutEvent()); 
      } 
     }); 
     return settings; 
    }