【发布时间】:2012-04-09 07:20:13
【问题描述】:
我正在尝试以最独立的方式将Plupload 与 JSF 集成,因为我创建了一个复合组件。
要在我的 JSF 页面中使用 Plupload,我只需调用:
<comp:plupload ... value=#{MyBean.files} />
其中 MyBean.files 是一个列表。
当我将文件添加到 Plupload 组件并单击“开始上传”按钮时,我希望它将所有内容上传到一个临时文件夹并使用这些文件属性(例如路径)填充我的复合组件的“值”中指定的对象)。
要上传我使用 servlet 的文件,它与 JSF 无关,它适用于第一部分:它将所有内容上传到一个临时文件夹。我的问题是第二部分,我做了很多研究,但我找不到将 JSF 复合组件中的属性“值”传递给我的 servlet 的方法。
Plupload 使用 javascript 配置一切,请求将被发送到以下代码中属性“url”中指定的 URL:
<composite:interface>
...
<composite:attribute name="value" required="true" />
</composite:interface>
<composite:implementation>
...
<script type="text/javascript">
// Convert divs to queue widgets when the DOM is ready
$(function() {
$("#uploader").pluploadQueue({
// General settings
runtimes : '#{cc.attrs.runtimePreferences}',
url : '/plupload',
max_file_size : '#{cc.attrs.maxFileSize}',
...
});
});
</script>
<div id="uploader">
<p><h:outputText value="Your browser does not support this." /></p>
</div>
</composite:implementation>
我将“/plupload”指定为 url,这是我的 servlet 的 url(在 web.xml 中)。
我可以考虑两种可能的解决方案:
继续使用这个完全独立于 FacesServlet 的 servlet,并找到一种方法将我的复合组件中的属性“值”作为请求属性传递给我的 servlet。但是,我该怎么做呢?
停止使用新的 servlet,我不应该这样做,因为我使用的是 JSF,一切都应该由 FacesServlet 处理。我可以创建一个 ManagedBean,而不是使用新的 servlet。在这个 managedBean 中,我可以创建一个方法并恢复 HttpRequest 和 HttpResponse。如果它是托管Bean,则将我的compositeComponent 与处理上传的方法通信会更容易。问题:如何通过 URL 引用 managedBean 的方法?我仍然必须在 javascript 代码中填写属性“url”。有没有像“/faces/MyBean?action='myMethod()'这样的东西?
提前感谢您的任何回答;)
【问题讨论】:
标签: javascript jsf servlets plupload