【问题标题】:What is the alternative of file browse in JSF?JSF中文件浏览的替代方法是什么?
【发布时间】:2011-12-18 01:28:44
【问题描述】:

我们一直在使用 Netbeans 6.9.1 在 JSF 中开发 Web 应用程序。这是关于购物的。因此,很多时候我们不得不处理图像。图片需要上传到 MySql 数据库。这样做需要一些机制来浏览图像文件,但我们发现 JSF 不支持直接浏览文件。我们可以使用 HTML 文件浏览 <input type="file".../>,但为此我们需要从 Servlet 获取外部上下文,以从请求参数访问它在 JSF 托管 bean 中的值。

HttpServletRequest request=(HttpServletRequest)FacesContext
                         .getCurrentInstance().getExternalContext().getRequest();

这可能不是我认为的方便、建议和最好的方法之一[而且,它可能不是将 HTML 与 JSF 组件混合的方法],如果我们要使用 HTML 文件浏览,我们将不得不维护在 JSF 和 HTML 文件浏览中最重要的是视图状态,本质上不会保持它的视图状态,而且我们只能从 HTML 文件浏览中获取文件名。在许多情况下,获取绝对文件路径是必不可少的。是否可以从 HTML 文件浏览中检索绝对文件路径并使其保持其视图状态?我们应该遵循哪种方法?

【问题讨论】:

  • 你在使用Richfaces、Icefaces等框架吗?
  • 我们现在没有使用框架。我们只是在关注 JSF 中的内容。

标签: java jsf


【解决方案1】:

例如,如果没有框架,您可以使用 Apache commons 包。或者战斧……只要谷歌搜索这两个,因为有简单的在线教程让你开始:

战斧或 公共文件上传

顺便说一下,您列出的在 JSF 中获取请求的方法非常流行,我也在我的 JSF 应用程序中使用它来处理几个不同的事情。所以试试吧。 希望这会有所帮助!

【讨论】:

    【解决方案2】:

    在 JSF 代码中摆弄原始 Servlet API 确实不是最佳实践。您应该尽量减少 javax.servlet 导入/依赖项。一个理想的托管 bean 没有这些导入。所以忘记那部分。

    standard JSF component library 确实没有附带代表<input type"file"> 的组件,原因很简单,JSF 所基于的标准 Servlet API 没有提供任何工具来解析@987654333 @ 要求。仅从 Servlet 3.0 版开始,新的HttpServletRequest#getParts() 方法才支持此功能。但那时 JSF 2.0 已经设计完成。我们目前处于 JSF 2.1,最终正式要求最低 Servlet 3.0,因此文件上传组件应该可以只使用标准 API。目前有两个正在进行的规范请求开放,以在 JSF 2.2 中包含文件上传组件:

    在此之前,您最好的选择是获取 3rd 方组件库。如果您正在寻找一个真正的准系统组件,它不会呈现任何额外的 JS/CSS 幻想,那么我建议您选择 Tomahawk's <t:inputFileUpload> component。您可以在以下文章中找到如何安装/配置它(不清楚您使用的是什么 JSF 版本,所以我在 JSF 1.x 和 2.x 中都提到了它):

    请注意,您关于如何检索绝对路径的问题使我的脖子毛有点竖起。您应该对文件的绝对路径感兴趣,而应该对文件的内容感兴趣。更详细的解释,另见How to get the file path from HTML input form in Firefox 3

    【讨论】:

    • 获取文件的完整路径是有正当理由的。例如,我有一个 Intranet 应用程序,我希望能够在其中存储对外部文件(例如电子表格)的引用,该文件存储在共享卷上,所有用户都可以通过文件系统引用(例如 @ 987654336@ 甚至file:\\\J:\Company\Documents\Order12046QualityTests.xls。在这种情况下,它是一个在订单生命周期内将多次更新的文件,我不想处理重复上传的问题。
    • @KevinRahe:为此,HTML 是错误的工具。使用客户端应用程序(例如 Applet)。另见 a.o. stackoverflow.com/q/27698363
    • Applet 需要本地安装的 JRE 和签名或其他通过沙盒安全性的方法,获取如此简单的信息似乎过于矫枉过正。我正在考虑类似于本地安装的实用程序,它将确定放置在其上的任何文件的路径(例如 Windows 命令提示符)并将其复制到剪贴板,从中可以将其粘贴到我的浏览器应用程序中的字段中,会更合适。
    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2014-02-06
    • 2015-06-21
    • 1970-01-01
    • 2022-11-13
    相关资源
    最近更新 更多