2014-10-06 45 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; 
    }