我试图以尽可能最独立的方式将Plupload与JSF集成,因为我创建了一个复合组件。在JSF中集成一个compositeComponent的属性和一个Servlet
要使用Plupload在我的JSF页面我只要致电:
<comp:plupload ... value=#{MyBean.files} />
凡MyBean.files是一个列表。
当我将文件添加到Plupload组件并单击按钮“开始上传”时,我希望它将所有内容上传到临时文件夹,并使用这些文件属性填充在我的复合组件的“value”中指定的对象(path,for实例)。
要上传我使用servlet的文件,它与JSF无关,它对第一部分工作正常:它将所有内容上传到临时文件夹。我的问题是第二部分,我做了大量的研究,但是我找不到一种方法将我的JSF复合组件中的属性“值”传递给我的servlet。
Plupload使用JavaScript来配置一切,请求将被发送到在下面的代码在属性“URL”指定的URL:我指定“/ plupload”作为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>
,这是我的servlet的网址(在web.xml中)。
我能想到的两种可能的解决方案:
继续使用这个servlet,这是由FacesServlet的完全独立,并找到一种方法,在我的复合成分通过属性“价值”作为请求属性到我的servlet。但是,我怎么能做到这一点?
停止使用新的servlet,我不应该这样做,因为我使用的是JSF,一切都应该由FacesServlet处理。而不是使用新的servlet,我可以创建一个ManagedBean。在这个managedBean中,我可以创建一个方法并恢复HttpRequest和HttpResponse。如果它是一个managedBean,那么使用处理上载的方法来交流我的compositeComponent会更容易。问题:如何通过URL引用managedBean的方法?我仍然需要在javascript代码中填写“url”属性。有什么样“/面/为myBean行动= 'myMethod的()'
感谢您事先的任何答案;?)
谢谢你回答这BalusC这将完全如果工作。我试图传递一个简单的字符串到我的servlet,但我想传递一个完整的对象,我不认为我可以通过URL来完成。正如我所说的,#{cc.attrs.value}是一个列表,使用你的代码,我得到列表的元素打印在我的HTML文件中。由于我的列表是空的,JSF呈现:url:'/ plupload /'+ encodeURIComponent('[]')。 – 2012-03-25 15:17:06
将其转换为字符串。或者通过唯一ID将其存储为会话属性,然后传递该ID。 – BalusC 2012-03-25 15:53:44
将它转换为字符串将不起作用...我不需要该变量的副本,我需要对它的引用= /。我尝试了会话的想法,我创建了一个新的会话范围的托管Bean,并使用我的复合组件中的预渲染事件加载它。它工作得很好;)。谢谢。我会写一个详细的答案,告诉我做了什么来帮助那些未来可能有类似问题的人。 – 2012-03-25 22:25:27