GertThiel
Aug 16th, 2004, 12:40 PM
Hi,
I read the related chapter in the reference (http://www.springframework.org/docs/reference/view.html#view-document-configsubclasspdf) 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):
<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>
FlexLayoutEngine.java (for Tapestry):
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.WebApplica tionContextUtils;
public class FlexLayoutEngine extends BaseEngine {
public static final String APPLICATION_CONTEXT_KEY = "appContext";
/**
* @see org.apache.tapestry.engine.AbstractEngine#setupFor Request(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.getWebApplicationContex t(
context.getServlet().getServletContext()
);
global.put(APPLICATION_CONTEXT_KEY, ac);
}
}
}
flpdfpreview-servlet.xml (Spring MVC):
<beans>
<bean id="flSpringMVController" class="gtds.web.SpringMVController"/>
<!-- <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlH andlerMapping">
<property name="mappings">
<props>
<prop key="/pdf/*.pdf">flSpringMVController</prop>
</props>
</property>
</bean> -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundl eViewResolver">
<property name="basename"><value>views</value></property>
</bean>
</beans>
views.properties (Spring MVC):
pdf.class=gtds.web.PreviewPdfView
pdf.url=/pdf/preview.pdf
SpringMVController.java (Spring MVC):
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");
}
}
PreviewPdfView.java (Spring MVC):
package gtds.web;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.document.Abst ractPdfView;
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.Abst ractPdfView#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();
}
}
Can someone help?
Regards.
P.S. This is a follow-up of Spring MVC with Tapestry (http://forum.springframework.org/showthread.php?t=9652).
I read the related chapter in the reference (http://www.springframework.org/docs/reference/view.html#view-document-configsubclasspdf) 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):
<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>
FlexLayoutEngine.java (for Tapestry):
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.WebApplica tionContextUtils;
public class FlexLayoutEngine extends BaseEngine {
public static final String APPLICATION_CONTEXT_KEY = "appContext";
/**
* @see org.apache.tapestry.engine.AbstractEngine#setupFor Request(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.getWebApplicationContex t(
context.getServlet().getServletContext()
);
global.put(APPLICATION_CONTEXT_KEY, ac);
}
}
}
flpdfpreview-servlet.xml (Spring MVC):
<beans>
<bean id="flSpringMVController" class="gtds.web.SpringMVController"/>
<!-- <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlH andlerMapping">
<property name="mappings">
<props>
<prop key="/pdf/*.pdf">flSpringMVController</prop>
</props>
</property>
</bean> -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundl eViewResolver">
<property name="basename"><value>views</value></property>
</bean>
</beans>
views.properties (Spring MVC):
pdf.class=gtds.web.PreviewPdfView
pdf.url=/pdf/preview.pdf
SpringMVController.java (Spring MVC):
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");
}
}
PreviewPdfView.java (Spring MVC):
package gtds.web;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.document.Abst ractPdfView;
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.Abst ractPdfView#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();
}
}
Can someone help?
Regards.
P.S. This is a follow-up of Spring MVC with Tapestry (http://forum.springframework.org/showthread.php?t=9652).