JSF 如何从支持 bean 重定向到在支持 bean 中动态构造的 URL?

2023-11-22

有希望通过一个例子来说明这个问题。我的页面上显示了 10 个文档,其中 3 个在 zip 包内包含附加信息。在初始页面加载期间,我只知道哪些文档具有此附加信息,我知道not知道这些 zip 文件的 URL。然后,我显示指向包含其他 zip 文件的 3 个文档的链接(“获取 Zip 包”)。当用户单击“获取 Zip 包”时,它会调用支持 bean 中的一个方法,该方法会访问数据库来找出 zip 包的 URL。完成此操作后,我想将 zip 包提供给浏览器,然后浏览器会弹出“另存为...”对话框,用户可以保存 zip 包。

我尝试了两种方法,但都不起作用。

方法一

<p:commandLink actionListener="#{myBackingBean.zipPackage(aDocument)}"
               value="Get Zip Package"
               ajax="false"
               rendered="#{aDocument.packageAvailable}"/>
public String zipPackage(DocItem item){
  //logic here to figure out the URL for this item's zip package
  return packageLink;
}

方法2

<h:outputLink onclick="getPackageLink([{name:'product', value: '#{aResult.product}'}, {name:'version',value:'#{aResult.version}'}])"
   <h:outputText value="Get Documentation Package"/>
</h:outputLink>
<p:remoteCommand name="getPackageLink" actionListener="#{kbBackingBean.zipPackage()}"/>
public String zipPackage() {
  Map map = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
  String product = (String) map.get("product");
  String version = (String) map.get("version");
  //logic here to figure out the URL for this item's zip package
  return packageLink;
}

当页面加载并显示 10 个文档时,“获取 Zip 包”链接(针对 3 个文档)没有指向任何内容,本质上与页面具有相同的 URL。当我单击它时,它会向服务器发送 GET 请求并调用支持 bean 函数。使用方法 1,浏览器似乎确实要等待辅助 bean 方法完成,然后才开始呈现响应。使用方法 2,无需等待,浏览器会立即重新加载页面。我怀疑,由于“获取 Zip 包”链接指向页面本身,浏览器的 GET 请求首先得到处理,而支持 bean 方法的响应就会丢失。

我怀疑第三种方法(我还没有尝试过)会很好地工作,那就是调用一个 Servlet,然后它会提供 zip 包。但是看到我如何获得 zip 包的直接 URL,我希望有一种方法可以将其提供给浏览器,而无需涉及 Servlet。

任何允许我在不调用 Servlet 的情况下使用 URL 的建议或方法都是非常受欢迎的。当然,如果 Servlet 是执行此操作的唯一“正确”方法,我肯定会这样做。

谢谢。


您可以尝试使用这种逻辑:

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
context.redirect(context.getRequestContextPath() + "download-page.jsf?product=" + product + "&version=" + version);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSF 如何从支持 bean 重定向到在支持 bean 中动态构造的 URL? 的相关文章

随机推荐

  • Typescript - 扩展自身的通用类型

    我最近遇到了一个看起来像这样的东西 interface Test
  • 合并 Pandas 中两行的内容

    我有一个数据框 我想在同一单元格中合并两行的内容 并用下划线分隔 如果这是原始 DF 0 eye right eye right hand 1 location location position 2 12 27 7 2 3 14 27 6
  • Web 平台安装程序是否支持自动化?

    我想知道是否可以使用命令行选项或配置文件自动执行 WPI 操作 以在无人值守模式下设置开发盒 看起来 WPI 采用 URL 作为命令行参数 但我不知道响应应该采用什么格式 以及它通常允许什么格式 编辑 感谢人们为提出自动化设置方法付出的巨大
  • 有没有办法查看 64 位浮点 IEEE754 表示形式的数字

    Javascript 根据以下规则将所有数字存储为双精度 64 位格式 IEEE 754 值 spec The Number type has exactly 18437736874454810627 that is 264 253 3 v
  • 从 std::map 值获取键的有效方法

    我有一张地图如下 std map lt std string int gt mapobj mapobj one 1 mapobj two 2 mapobj three 3 当输入是值时如何获取键 EX 输入 1 输出 一 注意 在我的例子中
  • 如何存储执行函数的结果并在以后重复使用?

    例如 我有 def readDb Fetch a lot of data from db spends a lot time return aList def calculation x readdb Process x return y
  • C#:对象的内存使用情况

    有没有办法找到特定对象使用了多少内存 例如一个列表 考虑到一切 比如字符串驻留以及编译器 运行时环境 其他所做的任何事情 ANTS 内存分析器分析 NET 代码的内存消耗 我过去用它取得了很好的成果
  • 我们可以在JQuery中执行SQL查询吗

    我们可以在 jQuery 回调函数和杂项中执行 mySQL 查询吗 功能 就像简单的查询 UPDATE EMPLOYEE SET PAY PAY 500 WHERE E ID 32 虽然您可以使用服务器端脚本的回调来执行对 MySQL 的查
  • 如何创建内存中文件对象

    我想制作一个内存文件以在 pygame 混合器中使用 我的意思是像http www pygame org docs ref music html pygame mixer music load这表示 load 方法支持文件对象 import
  • fullcalendar动态添加事件

    我正在尝试在我的完整日历中动态创建事件 I have calendar fullCalendar viewRender function view var h if view name month h NaN else h 2500 hig
  • 将数组映射变量替换为实际变量名称/字符串?

    我正在尝试编辑 Greasemonkey jQuery 脚本 我无法在这里发布链接 代码经过 minify 混淆和压缩 它是这样开始的 var 0x21e9 x67 x65 x74 x4D x6F x6E x74 x68 x67 x65 x
  • Python中使用random时是否需要调用seed()? [复制]

    这个问题在这里已经有答案了 我正在查看以下代码 from random import choice for val in range 10 a join str choice range 20 for idx in range 4 prin
  • Three.js补间camera.lookat

    我尝试使用 Tween js 在 Three js 中补间camera lookAt 但收效甚微 这有效 selectedHotspot object var tween new TWEEN Tween camera lookAt obje
  • 在C++中如何检查字符串是否可以转换为double?

    我有一个字符串 它可以是数字 甚至是浮点数或双精度类型 而不仅仅是整数 它也可以是非数字的单词 我想检查这个字符串是否可以转换为双精度 如果可以 那么我想进行转换 对于非数字字符串 我想要不同的行为 我已经尝试过这个 double tmp
  • 将文本文件读入数组

    我对编程真的很陌生 在为夏季项目认真思考了一周之后 我真的很感谢一些帮助 我正在尝试读取一个长文本文件 它只是一个长字符串 注意 不是实际的编程字符串 字母 然后将每个字母放入网格中的位置 该程序的目的最终是为了解决单词搜索 到目前为止 我
  • 使用 JavaScript 编写 xml 的库

    我正在使用 JavaScript node js 进行一些服务器端编码 并且我想编写有效的 xml 我找到了两个库 但我确信还有更多 更好 http goessner net download prj jsonxml LGPL 尚未公布 h
  • 如何从基本控制器获取操作名称?

    我想在我的一个控制器上实现一个基本控制器 在该基本控制器中 我希望能够获取当前执行的 ActionResult 名称 我该怎么做呢 public class HomeController ControllerBase public Acti
  • collections.Counter:most_common 包括相等计数

    In collections Counter 方法most common n 仅返回列表中 n 个最频繁出现的项目 我正是需要这个 但我也需要包括相等的计数 from collections import Counter test Coun
  • 如何以编程方式访问剪贴板数据?

    如何以编程方式访问 Mac 上的剪贴板数据 苹果有一个粘贴板编程指南您正在寻找的主要课程是NSP纸板 读取字符串的示例是 NSPasteboard pasteboard lt Get a pasteboard gt NSArray clas
  • JSF 如何从支持 bean 重定向到在支持 bean 中动态构造的 URL?

    有希望通过一个例子来说明这个问题 我的页面上显示了 10 个文档 其中 3 个在 zip 包内包含附加信息 在初始页面加载期间 我只知道哪些文档具有此附加信息 我知道not知道这些 zip 文件的 URL 然后 我显示指向包含其他 zip