Text File download with RichFaces
rhardy5014 Jan 8, 2008 4:38 AMHi,
I am using JBOSS Seam v2.0.0 and RichFaces 3.1.2
I am trying to make the following happen:
I have a page containing a commandLink (or commandButton) and when a user clicks on this, I want a file to be downloaded. This file will be generated by a backing bean method.
I have set my code up like this:
<h:commandLink immediate="true" action="#{searchManager.generateVCalendar}"> <h:graphicImage value="/images/vcalendar.bmp"/> </h:commandLink>
and
public String generateVCalendar() { String fileContents = "text file"; log.debug("generateVCalendar"); if (!facesContext.getResponseComplete()) { String fileName = "export.wri"; try { ServletContext servletContext = (ServletContext) facesContext.getExternalContext().getContext(); HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse(); String encoding = response.getCharacterEncoding(); byte[] bytes = fileContents.getBytes(encoding); response.setContentType("text/plain"); StringBuffer disposition = new StringBuffer("attachment; filename=\""); disposition.append("Plato-Termin"); disposition.append(".txt"); disposition.append("\""); response.setHeader("Content-Disposition", disposition.toString()); response.setContentLength(bytes.length); ServletOutputStream out = null; out = response.getOutputStream(); out.write(bytes); out.flush(); out.close(); facesContext.getApplication().getStateManager().saveSerializedView(facesContext); facesContext.responseComplete(); } catch (Exception e) { log.error("generateVCalendar Exception: " + e.getMessage()); } } return null; }
However, when I click on the link, I get:
java.lang.NullPointerException java.util.regex.Matcher.getTextLength(Matcher.java:1127) java.util.regex.Matcher.reset(Matcher.java:284) java.util.regex.Matcher.<init>(Matcher.java:205) java.util.regex.Pattern.matcher(Pattern.java:879) org.ajax4jsf.webapp.ParserConfig.getParser(ParserConfig.java:28) org.ajax4jsf.webapp.ConfigurableXMLFilter.getParser(ConfigurableXMLFilter.java:109) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:259) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281) org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
Can anyone help me as to why this is not working?
Or, is there a better way to do a file download. e.g. <a4j:mediaOutput>? I have seen examples for this but these always seem to be for images embedded into a page.
Thanks for your help,
Richard.