JSF中文件浏览的替代方法是什么?

时间:2011-10-30 00:37:09

标签: java jsf

我们一直在使用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文件中检索绝对文件路径并使其保持视图状态?我们应该遵循哪种方法?

2 个答案:

答案 0 :(得分:3)

例如,如果没有框架,您可以使用Apache commons包。或者Tomahawk ......只需谷歌搜索这两个,因为有简单的在线教程可以帮助您入门:

tomahawk OR 公地文件上传

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

答案 1 :(得分:2)

在JSF代码中使用原始Servlet API并不是最好的做法。您应该尽可能地尽量减少javax.servlet导入/依赖项。理想的托管bean没有这些导入。所以忘掉那部分。

standard JSF component library确实没有附带代表<input type"file">的组件,原因很简单,因为JSF基于的标准Servlet API没有提供任何设施解析multipart/form-data个请求。只有自Servlet 3.0版以来,新的HttpServletRequest#getParts()方法才支持此功能。但在那时,JSF 2.0已经设计完成了。我们目前正处于JSF 2.1,最终官方要求至少使用Servlet 3.0,因此只需标准API就可以实现文件上传组件。现在有两个正在进行的规范请求打开,包括JSF 2.2中的文件上传组件:

在此之前,您最好的选择是获取第三方组件库。如果你正在寻找一个真正的准系统组件,它不会提供任何额外的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

相关问题