gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:24:58 24 4
gpt4 key购买 nike

一个例子应该有希望证明这个问题。我在页面上显示了 10 个文档,其中 3 个在 zip 包中包含其他信息。在初始页面加载期间,我只知道哪些文档具有此附加信息,我不知道这些 zip 文件的 URL。那么,我会显示一个链接(“获取 Zip 包”),指向包含其他 zip 文件的 3 个文档。当用户单击“获取 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;
}

方法二

<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);

关于JSF 如何从支持 bean 重定向到支持 bean 中动态构造的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com