Jsf 接缝+;RichFaces文件上传应鼓励重新加载
我正在使用RichFaces3.3和Seam 2开发一个web应用程序 我有一个包含以下内容的页面:Jsf 接缝+;RichFaces文件上传应鼓励重新加载,jsf,richfaces,seam,seam2,Jsf,Richfaces,Seam,Seam2,我正在使用RichFaces3.3和Seam 2开发一个web应用程序 我有一个包含以下内容的页面: <h:form> <s:div id="myPanel"> <h:messages/> <rich:fileUpload fileUploadListener="#{service.uploadEvent}" maxFilesQuantity="1"> <a:support event="onuploadcomplete" r
<h:form>
<s:div id="myPanel">
<h:messages/>
<rich:fileUpload fileUploadListener="#{service.uploadEvent}" maxFilesQuantity="1">
<a:support event="onuploadcomplete" reRender="myPanel"/>
</rich:fileUpload>
</s:div>
</h:form>
在service.uploadEvent
方法中,我接收文件并添加一条FacesMessage,让用户知道成功上传的文件
实际情况是:
- 服务器启动临时会话#1
- 服务器呈现页面
- 服务器发送完成的页面并终止对话#1
- 服务器启动临时会话#2
- 服务器调用
。此方法将service.fileUpload()
添加到会话范围FacesMessage
seam组件中FacesMessage
- 服务器返回AJAX请求的响应并终止会话2,包括所有排队的
sFacesMessage
- 服务器启动临时会话#3
- 服务器呈现页面,为对话创建新的空
FacesMessages
- 服务器返回AJAX请求的响应(其中包含一个空的
)并终止对话#3
service.fileUpload()
中将对话标记为长时间运行,并在执行fileUploadComplete()
时结束对话正确的方法是在与
service.fileUpload()
相同的对话中重新提交页面。这是可能的吗?这只能通过使用自定义StatusMessages组件并将其范围限定到在Reender上仍然可用的上下文(例如页面或长时间运行的对话)来解决。您是否尝试过将
替换为
?当AJAX操作创建新的FacesMessage时,它工作得很好。请参见Hmm,似乎RichFaces4通过在fileUpload上指定“render”属性有了解决方案。此属性在RichFaces3中不可用。仅使用长时间运行的对话进行测试。这不起作用,因为Seam在渲染阶段之前将所有状态消息推出到FacesContext。是的,我有。它不会呈现uploadListener中发出的FacesMessages。