我正在使用richfaces 4处理jsf 2.我需要从扩展数据表中选择一条记录,并根据选择下载XML。
为了实现下载,我遵循了BalusC在Forcing a save as dialogue from any web browser from JSF application
中提到的方法我的代码如下。
XHTML File
----------
<h:commandButton id="Download" value="#{msg.buttonDownload}"
action="#{studentMBean.downloadStudent}"
render="studentTable,datascroller" immediate="true">
</h:commandButton>
downloadStudent method
----------------------
Student student = studentSvc.downloadStudent(studentMap);
JAXBContext jaxbContext = JAXBContext.newInstance(Student.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
response.reset();
response.setContentType("application/xml");
response.setHeader("Content-disposition", "attachment; filename=\"studentData.xml\"");
jaxbMarshaller.marshal(student, response.getWriter());
response.getWriter().close();
facesContext.responseComplete();
这里的问题是studentTable和dataScroller在文件下载后没有呈现。因此,不会清除选择下载的复选框值。 有什么建议吗?
答案 0 :(得分:0)
我认为根本不可能。有关responseComplete的信息,请参阅此说明。 - &GT; JSF 2.0 RenderResponse and ResponseComplete
您可以将文件作为下载请求的响应,也可以使用AJAX部分更新来重新呈现内容。两者同时是不可能的,您将需要两个请求。我猜这只有在点击按钮时才可以通过一些自定义的javascript-ajax调用。