我正在为Liferay 6.0.6(插件SDK 6.1)开发一个JSF 2.0 portlet,我需要文件上传功能。我尝试了以下不同的解决方案但没有成功:
ActionRequest
processing bridge:inputFile
组件任何有关如何操作的建议都会受到欢迎,也会破解或使用除JSF之外的其他技术。
答案 0 :(得分:2)
为什么不使用标准HTML表单:
<form action="your_action_goes_here" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
然后在您的Java代码中覆盖processAction方法(通常在扩展GenericPortlet或Liferay的MVCPortlet或JSPPortlet(用于5.2.3)的类中)然后您可以通过以下方式获取文件:
public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) {
UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest);
File file = (File) uploadRequest.getFile("file");
// Do something with your file here
}
完成工作! :)这只是一个框架代码,你需要做一些异常处理,但你的IDE会有所帮助。
~~编辑~~~
可能使用其他可能的解决方案:
HttpServletRequest req = FacesUtil.getRequest();
UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(req);
我来自:http://ironicprogrammer.blogspot.com/2010/03/file-upload-in-jsf2.html
这有什么帮助吗?
答案 1 :(得分:0)
使用JSF标准h:inputFile
标签(或任何流行的组件套件中的任何文件上传标签):
<h:form enctype="multipart/form-data">
<h:inputFile value="#{bean.uploadedPart}" />
</h:form>
private Part uploadedPart;
public Part getUploadedPart() {
return uploadedPart;
}
public void setUploadedPart(Part uploadedPart) {
this.uploadedPart = uploadedPart;
}
答案 2 :(得分:-1)
PortletFacesBridge 2.0.1的 bridge:inputFile 组件适用于Liferay 6.1 EE,适用于使用JSF 2.0的Portlet 2.0 portlet。因为我们使用的是Primefaces(v3.2),所以我也尝试使用它的uploadcomponent,但是doesn't work in portlets。正在研究future version of the PortletFacesBridge/Primefaces。
对我有用的是:
XHTML:
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:bridge="http://portletfaces.org/bridge">
...
<h:form enctype="multipart/form-data" method="POST">
<bridge:inputFile id="icon" binding="#{bean.attachment}" />
</h:form>
...
豆:
import org.portletfaces.bridge.component.UploadedFile
...
private transient HtmlInputFile attachment;
...
public HtmlInputFile getAttachment() {
return attachment;
}
public void setAttachment(HtmlInputFile attachment) {
this.attachment = attachment;
}
public String addApplication() {
UploadedFile uploadedFile = attachment.getUploadedFile();
...
}
答案 3 :(得分:-1)
我在Liferay-6.1-EE上成功使用了Primefaces v3.2的文件上传组件和内置桥:inputFile和Liferay-Faces v3.1.0-RC1。仍然是候选版本,但相当稳定。 虽然没有使用Primefaces上传组件的高级功能。 感谢Neil Griffin先生和其他几位人员在使portF环境中的JSF 2.x工作方面做得非常出色。