[ http://jira.codehaus.org/browse/DISPL-30?page=all ] fabrizio giustina closed DISPL-30: ----------------------------------
Marking fixed issue as closed. > Spring Interceptor for use with servlet 2.2 containers > ------------------------------------------------------ > > Key: DISPL-30 > URL: http://jira.codehaus.org/browse/DISPL-30 > Project: DisplayTag > Type: New Feature > Components: Export > Versions: 1.0 RC1 > Reporter: fabrizio giustina > Assignee: fabrizio giustina > Priority: Minor > Fix For: 1.0 > Attachments: dispinterc.zip, displaytag.zip > > Time Spent: 1 day > > Se http://forum.springframework.org/viewtopic.php?t=1004 and displaytag-user > mailing list > Boyce, Keith Garry > I developed an interceptor to use instead of responseOverrideFilter for use > in Servlet 2.2 containers with ServletWrapperController (posted on jira). > Please give me credit in javadoc if you decide to use it. Here is the code: > Code: > /* > * DisplayTagInterceptor.java > * > * Copyright 2004 by Electronic Data Systems > * Corporation. All rights reserved. > * > * An unpublished work created Sep 26, 2004, 2004. This work is a > * trade secret of EDS and unauthorized use or copying > * is prohibited. > * > */ > package org.springframework.web.servlet.mvc; > import java.io.PrintWriter; > import javax.servlet.http.HttpServletRequest; > import javax.servlet.http.HttpServletResponse; > import org.apache.commons.lang.ObjectUtils; > import org.apache.commons.lang.StringUtils; > import org.apache.commons.logging.Log; > import org.apache.commons.logging.LogFactory; > import org.displaytag.filter.BufferedResponseWrapper; > import org.displaytag.tags.TableTag; > import org.displaytag.tags.TableTagParameters; > import org.springframework.web.servlet.HandlerInterceptor; > import org.springframework.web.servlet.ModelAndView; > import org.springframework.web.servlet.HandlerAdapter; > /** > * @author jztb88 > * > * TODO To change the template for this generated type comment go to > * Window - Preferences - Java - Code Style - Code Templates > */ > public class DisplayTagInterceptor implements HandlerInterceptor { > final static Log log = LogFactory.getLog(DisplayTagInterceptor.class); > /* (non-Javadoc) > * @see > org.springframework.web.servlet.HandlerInterceptor#preHandle(javax.servlet.http.HttpServletRequest, > javax.servlet.http.HttpServletResponse, java.lang.Object) > */ > public boolean preHandle(HttpServletRequest servletRequest, > HttpServletResponse servletResponse, Object handler) throws Exception { > if > (servletRequest.getParameter(TableTagParameters.PARAMETER_EXPORTING) == null) > { > if (log.isDebugEnabled()) > { > log.debug("Filter has been called, but PARAMETER_EXPORTING > parameter has not been found."); > } > return true; > } > HttpServletRequest request = (HttpServletRequest) servletRequest; > BufferedResponseWrapper wrapper = new > BufferedResponseWrapper((HttpServletResponse) servletResponse); > // In a portlet environment, you do not have direct access to the > actual request object, so any attribute that > // is added will not be visible outside of your portlet. So instead, > users MUST append to the StringBuffer, so > // that the portlets do not have to bind a new attribute to the > request. > request.setAttribute(TableTag.FILTER_CONTENT_OVERRIDE_BODY, new > StringBuffer(8096)); > request.setAttribute(TableTag.FILTER_CONTENT_OVERRIDE_TYPE, new > StringBuffer(80)); > request.setAttribute(TableTag.FILTER_CONTENT_OVERRIDE_FILENAME, new > StringBuffer(80)); > HandlerAdapter handlerAdaptor = new SimpleControllerHandlerAdapter(); > handlerAdaptor.handle(request,wrapper,handler); > > String pageContent; > String contentType; > StringBuffer buf = (StringBuffer) > request.getAttribute(TableTag.FILTER_CONTENT_OVERRIDE_BODY); > HttpServletResponse resp = (HttpServletResponse) servletResponse; > String characterEncoding = resp.getCharacterEncoding(); > if (characterEncoding != null) > { > characterEncoding = "; charset=" + characterEncoding; > } > if (buf != null && buf.length() > 0) > { > pageContent = buf.toString(); > contentType = > ObjectUtils.toString(request.getAttribute(TableTag.FILTER_CONTENT_OVERRIDE_TYPE)); > if (log.isDebugEnabled()) > { > log.debug("Overriding output, writing new output with content > type " + contentType); > } > StringBuffer filename = (StringBuffer) > request.getAttribute(TableTag.FILTER_CONTENT_OVERRIDE_FILENAME); > if (filename != null && > StringUtils.isNotEmpty(filename.toString())) > { > if (log.isDebugEnabled()) > { > log.debug("Filename specified as " + filename); > } > resp.setHeader("Content-Disposition", "attachment; > filename=\"" + filename + "\""); > } > } > else > { > log.debug("NOT overriding input. "); > pageContent = wrapper.toString(); > contentType = wrapper.getContentType(); > } > if (contentType != null) > { > if (contentType.indexOf("charset") > -1) > { > // charset is already specified (see #921811) > servletResponse.setContentType(contentType); > } > else > { > servletResponse.setContentType(contentType + > StringUtils.defaultString(characterEncoding)); > } > } > servletResponse.setContentLength(pageContent.length()); > PrintWriter out = servletResponse.getWriter(); > out.write(pageContent); > out.close(); > return false; > } > /* (non-Javadoc) > * @see > org.springframework.web.servlet.HandlerInterceptor#postHandle(javax.servlet.http.HttpServletRequest, > javax.servlet.http.HttpServletResponse, java.lang.Object, > org.springframework.web.servlet.ModelAndView) > */ > public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, > Object arg2, ModelAndView arg3) throws Exception { > // Nothing to do > > } > /* (non-Javadoc) > * @see > org.springframework.web.servlet.HandlerInterceptor#afterCompletion(javax.servlet.http.HttpServletRequest, > javax.servlet.http.HttpServletResponse, java.lang.Object, > java.lang.Exception) > */ > public void afterCompletion(HttpServletRequest arg0, HttpServletResponse > arg1, Object arg2, Exception arg3) throws Exception { > // Nothing to do > } > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ------------------------------------------------------- This SF.Net email is sponsored by the JBoss Inc. Get Certified Today * Register for a JBoss Training Course Free Certification Exam for All Training Attendees Through End of 2005 Visit http://www.jboss.com/services/certification for more information _______________________________________________ displaytag-devel mailing list displaytag-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/displaytag-devel