Hi,
I read the related chapter in the reference about subclassing a AbstractPdfView. But I canīt get it working all.
I want to combine Tapestry with Spring, but still use Spring MVC to create PDF files on the fly.
My web.xml (DTDs ommited intentionally):
FlexLayoutEngine.java (for Tapestry):Code:<web-app> <display-name>FlexLayout</display-name> <filter> <filter-name>redirect</filter-name> <filter-class>org.apache.tapestry.RedirectFilter</filter-class> </filter> <filter-mapping> <filter-name>redirect</filter-name> <url-pattern>/</url-pattern> </filter-mapping> <servlet> <servlet-name>flexlayout</servlet-name> <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>flpdfpreview</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>flexlayout</servlet-name> <url-pattern>/app</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>flpdfpreview</servlet-name> <url-pattern>/pdf</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
flpdfpreview-servlet.xml (Spring MVC):Code:package gtds.web; import java.util.Map; import org.apache.tapestry.engine.BaseEngine; import org.apache.tapestry.request.RequestContext; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public class FlexLayoutEngine extends BaseEngine { public static final String APPLICATION_CONTEXT_KEY = "appContext"; /** * @see org.apache.tapestry.engine.AbstractEngine#setupForRequest(org.apache.tapestry.request.RequestContext) */ protected void setupForRequest(RequestContext context) { super.setupForRequest(context); // insert ApplicationContext in global, if not there Map global = (Map) getGlobal(); ApplicationContext ac = (ApplicationContext) global.get(APPLICATION_CONTEXT_KEY); if (ac == null) { ac = WebApplicationContextUtils.getWebApplicationContext( context.getServlet().getServletContext() ); global.put(APPLICATION_CONTEXT_KEY, ac); } } }
views.properties (Spring MVC):Code:<beans> <bean id="flSpringMVController" class="gtds.web.SpringMVController"/> <!-- <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/pdf/*.pdf">flSpringMVController</prop> </props> </property> </bean> --> <bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename"><value>views</value></property> </bean> </beans>
SpringMVController.java (Spring MVC):Code:pdf.class=gtds.web.PreviewPdfView pdf.url=/pdf/preview.pdf
PreviewPdfView.java (Spring MVC):Code:package gtds.web; import org.springframework.web.servlet.mvc.Controller; import org.springframework.web.servlet.ModelAndView; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class SpringMVController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { return new ModelAndView("pdf"); } }
Can someone help?Code:package gtds.web; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.view.document.AbstractPdfView; import com.lowagie.text.Document; import com.lowagie.text.PageSize; import com.lowagie.text.pdf.PdfWriter; public class PreviewPdfView extends AbstractPdfView { /* (non-Javadoc) * @see org.springframework.web.servlet.view.document.AbstractPdfView#buildPdfDocument(java.util.Map, com.lowagie.text.Document, com.lowagie.text.pdf.PdfWriter, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ protected void buildPdfDocument( Map model, Document doc, PdfWriter writer, HttpServletRequest request, HttpServletResponse response) throws Exception { doc.setPageSize(PageSize.A4); doc.addAuthor("FlexLayout Professionelle Layouts Service"); doc.addTitle("FlexLayout Professionelle Layouts Service"); doc.addSubject("FlexLayout Professionelle Layouts Service"); doc.open(); doc.close(); } }
Regards.
P.S. This is a follow-up of Spring MVC with Tapestry.


Reply With Quote