使用 Vaadin 从菜单栏打开 pdf 文件

2024-01-27

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

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
}

感谢帮助!

解决方案:

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_");
} 

注意:此代码可以工作,但代码的结构并不完美;-) 更好的方法是将“basepath”和“pdf”存储为属性......


这里描述了一个类似的问题:如何指定一个按钮来打开一个URL? https://stackoverflow.com/questions/22354974/how-to-specify-a-button-to-open-an-url/22374822#22374822一种可能的解决方案:

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 将其附加到任何组件,那么这不是必需的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Vaadin 从菜单栏打开 pdf 文件 的相关文章

随机推荐

  • 检查2个R程序是否相同

    最近我了解到我可以使用identical or all equal检查 2 个数据集是否相同 我还可以用它们来检查 2 个 R 程序是否相同吗 还有比下面更好或更合适的方法吗 program 1 lt readLines c r stuff
  • 是否可以使用 Windows 命令行编辑二进制文件?

    Windows 中有没有办法从命令行编辑二进制文件 即可以写入批处理文件的方式 我希望能够在现有文件中的已知位置编辑单个字节 这个现有问题 1 已经解决 但这是一个 Linux 解决方案 我正在寻找类似的 Windows 版本 背景 从 S
  • 如何获取 DataSet 作为 Entity Framework 5.0 中查询的结果?

    我不确定这是否可能 我可能尝试使用错误的工具来完成我想做的工作 假设我想要执行以下操作 我执行一个名为 GetTableName 的函数 该函数返回我想要从中获取数据的 SQL 表的名称 我执行另一个名为 GetFields 的函数 该函数
  • jQuery UI ajax 选项卡 - 在选项卡内加载链接时请求成倍增加

    我正在使用 jQuery UI 选项卡 通过 ajax 加载选项卡内容 内容可能包含我想要在所选选项卡中加载的链接 为了实现这一点 我使用这段代码 tab div tabs load function event ui a not targ
  • 修改函数参数

    很抱歉 如果这是一个愚蠢的问题 但我已经寻找了一段时间并没有真正找到答案 如果我正在编写一个 python 函数 例如 def function in1 in2 in1 in1 1 in2 in2 1 我该如何坚持这些改变 我知道他们为什么
  • 如何映射嵌套的复杂JSON对象并将它们保存到核心数据?

    我在将复杂的嵌套 JSON 数据映射和保存到核心数据对象时遇到问题 它用于在离线模式和缓存的情况下读取数据 JSON也有代码 它代表代码列表中对象的id JSON 中对象的嵌套深度可以在 5 8 个对象之间 此类 简化的 JSON 的示例如
  • 在 iOS 上缩小图像最节省内存的方法是什么?

    在后台线程中 我的应用程序需要从磁盘读取图像 将其缩小到屏幕大小 1024x768 或 2048x1536 并将其保存回磁盘 原始图像大部分来自相机胶卷 但其中一些可能具有更大的尺寸 例如 3000x3000 随后 在不同的线程中 这些图像
  • PassportJs 身份验证无限循环和执行(默认)查询

    我正在尝试使用 PassportJs 和 Sequelize 构建身份验证系统 我自己制作了注册系统 使用Sequelize 我只想使用 PassportJS 进行登录 它不会将我重定向到 failureRedirect 路由 也不会重定向
  • 从服务器动态添加数据以自动完成 Textview

    我想在我的android应用程序中实现google类型搜索 为此我使用了自动完成文本视图 当我一个接一个地输入字符时它非常有效 但是当我同时输入多个字符时会出现问题 我的应用程序显示一个对话框并强制关闭 提前致谢 public class
  • 位置 0 出现意外标记文件结束

    RequestMapping value sensorlog method RequestMethod POST public ResponseBody String sensorlog HttpServletRequest request
  • 如何创建一个大小有限的VecDeque?

    我想实施一个VecDeque有最大尺寸限制 我有两个策略 但我都无法完成 第一种方法 通过组合继承 我创建了一个新结构 pub struct LimVecDeque
  • 通过 TCP 发送和接收 XML 数据

    我一直在尝试弄清楚如何通过 TCP 服务器发送和接收 XML 数据 我有java编程背景 所以我在这里有点超出我的深度 如果我只发送纯文本 我的程序就可以工作 但是一旦我尝试发送 xml 数据 它就会挂起 服务器永远不会收到消息 我一直在寻
  • 如何使我的请求在后台运行,同时填充其他 EditText(线程)?

    我是线程新手 但我有一个 EditText 视图 每当失去焦点时 它都会使用用户从 EditText 的输入填充带有图像徽标的 RecyclerView 但是 每当用户失去焦点并且调用该方法时 一切都会停止一段时间 这意味着我不擅长线程 我
  • 将 stdout 和 stderr 重定向到文件和控制台

    在 powershell 脚本中 我调用一个程序并想要重定向stdout and stderr to 不同的文件 同时仍然在控制台中显示两者的输出 所以基本上 我想要 stdout gt stdout stdout gt out log s
  • 无法在 Eclipse + EPIC 中查看本地文件

    我刚刚安装了 Eclipse 3 7 的 Perl EPIC 插件 调试器本身工作正常 我可以单步执行我的代码 但是我看不到任何变量 Eclipse 在错误日志中报告此错误 解析调试器变量时发生错误 的内容 变量视图可能不准确 字符串导致的
  • 录制的声音文件(ala google now,google keep)-RecognizerIntent/Listener

    我一直在开发一个使用 recognizerIntent 来获取语音输入的应用程序 然而 自从 jelly bean 推出以来 我一直无法从我的语音输入中获取实际的声音文件 在识别监听器中 http developer android com
  • 您不能对同一个动态路径 Nextjs 使用不同的 slug 名称

    我在我的项目中使用基于文件夹结构的 nextjs 默认动态路由技术 我有一条路线是 pages language location location id 现在我遇到一个用例 除了最后一个参数之外 我需要与上面的路由完全相同 locatio
  • C#:从正文和文件中将模型发布为 MultipartFormDataContent

    我正在寻找一种在一个请求中发送模型和图像的方法 我尝试从正文发送我的模型 但我不知道如何发送文件 除了在不同的文件中发送图像和模型之外 还有其他方法吗 这是我的 API 中的 POST 方法 HttpPost Route UploadNew
  • 如何使用 Python 从 Firebase 存储中检索图像?

    我已经将图像存储到 Firebase Storage 我需要使用 Python 代码将其取出 我可以使用任何 URL 检索图像吗 或者有什么办法可以找回来吗 以下是我如何将其存储在 Firebase Storage 中的图像 这就是我用的
  • 使用 Vaadin 从菜单栏打开 pdf 文件

    我的 vaadin 应用程序中有一个菜单栏 并且想要添加一个项目来打开 pdf 文件 这是浏览器的新选项卡 我找到了一些使用按钮打开文件的解决方案 但我必须使用 MenuItem MenuBar Command commandHandler