掲示板

Help, download file using SimpleFormController and serveResource

12年前 に Roberto Rodriguez によって更新されました。

Help, download file using SimpleFormController and serveResource

New Member 投稿: 17 参加年月日: 10/08/18 最新の投稿
I need to download a file in a portlet and I've read that with the method: serveResource, but i can not work in my project.

How I can ntegration of this method serveResource with my application?

ReportControllerResponse.java

package ve.com.cantv.iptv.portal.controller.report;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletSession;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;

import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import org.springframework.validation.BindException;
import org.springframework.web.portlet.mvc.SimpleFormController;
import org.springframework.web.portlet.util.PortletUtils;

import ve.com.cantv.common.hera.util.CantvProperty;
import ve.com.cantv.iptv.portal.model.ReportPortal;
import ve.com.cantv.iptv.portal.util.CommonsPortalAdm;
import ve.com.cantv.iptv.proxy.portal.exception.PortalException;

public class ReportControllerResponse extends SimpleFormController {

	CommonsPortalAdm commonsPortalAdm = new CommonsPortalAdm();

	public void afterPropertiesSet() throws Exception {
		this.setRedirectAction(true);
		System.out.println("------ Start Controller ---------------");
	}

	/**
	 * 
	 * Load element to form.
	 * 
	 * @param request
	 */
	protected Object formBackingObject(PortletRequest request) {

		PortletSession session = request.getPortletSession();

		ReportPortal reportPortal = (ReportPortal) session
				.getAttribute("reportPortal");

		return reportPortal;

	}

	/**
	 * 
	 * Send information to the next controller.
	 * 
	 * @param request
	 * @param response
	 * @param obj
	 * @param errors
	 */
	public void onSubmitAction(ActionRequest request, ActionResponse response,
			Object obj, BindException errors) throws Exception {

		PortletUtils.clearAllRenderParameters(response);

		PortletSession session = request.getPortletSession();

		response.setRenderParameter("action", "reportBegin");

	}

	public void serveResource(ResourceRequest req, ResourceResponse res)
			throws PortletException, IOException {

		OutputStream out = res.getPortletOutputStream();
		File imagen = new File("C:\\prueba.pdf");
		InputStream in = new FileInputStream(imagen);
		String mime = getPortletContext().getMimeType(imagen.getAbsolutePath());
		res.setContentType(mime);
		
		if (in == null) {
			out.close();
		} else {
			byte[] buffer = new byte[4096];
			int len;
			while ((len = in.read(buffer)) != -1) {
				out.write(buffer, 0, len);
			}
			out.flush();
			in.close();
			out.close();
		}
	}

}


portlet.xml

	<portlet>
		<portlet-name>reportIPTV</portlet-name>
		<portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
		<init-param>
			<name>contextConfigLocation</name>
			<value>/WEB-INF/context/portlet/report-context.xml</value>
		</init-param>
		<supports>
			<mime-type>text/html</mime-type>
			<portlet-mode>view</portlet-mode>
		</supports>
		<portlet-info>
			<title>Reportes</title>
		</portlet-info>
	</portlet>


portlet/report-context.xml

<!--?xml version="1.0" encoding="UTF-8" ?-->

<beans>
    <!-- Controlador Reporte Inicio -->
    <bean id="reportBeginController" class="ve.com.cantv.iptv.portal.controller.report.ReportController">
    	<property name="sessionForm"><value>true</value></property>
		<property name="commandName"><value>model</value></property>
		<property name="commandClass"><value>ve.com.cantv.iptv.portal.model.ReportPortal</value></property>
		<property name="formView"><value>report</value></property>
		<property name="successView" value="report" />
    </bean>  
    
    <!-- Controlador Reporte Fin -->
    <bean id="reportEndController" class="ve.com.cantv.iptv.portal.controller.report.ReportControllerResponse">
    	<property name="sessionForm"><value>true</value></property>
		<property name="commandName"><value>model</value></property>
		<property name="commandClass"><value>ve.com.cantv.iptv.portal.model.ReportPortal</value></property>
		<property name="formView"><value>reportResponse</value></property>
		<property name="successView" value="reportResponse" />
    </bean>     
       
    
	<!-- Handler Mapping -->

	<bean id="parameterMappingInterceptor" class="org.springframework.web.portlet.handler.ParameterMappingInterceptor" />
	
	<bean id="portletModeParameterHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeParameterHandlerMapping">
		<property name="interceptors">
			<list>
				<ref bean="parameterMappingInterceptor" />
			</list>
		</property>
		<property name="portletModeParameterMap">
			<map>
				<entry key="view">
					<map>
						<entry key="reportBegin"><ref bean="reportBeginController" /></entry>
						<entry key="reportEnd"><ref bean="reportEndController" /></entry>
					</map>
				</entry>
			</map>
		</property>
	</bean>
	
	<bean id="portletModeHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeHandlerMapping">
		<property name="portletModeMap">
			<map>
				<entry key="view"><ref bean="reportBeginController" /></entry>
			</map>
		</property>
	</bean>
	
	
	<!-- Default View Resolver -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="cache" value="false" />
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/report/" />
		<property name="suffix" value=".jsp" />
	</bean>
			
</beans>
thumbnail
12年前 に David H Nebinger によって更新されました。

RE: Help, download file using SimpleFormController and serveResource

Liferay Legend 投稿: 14919 参加年月日: 06/09/02 最新の投稿
Have you been able to determine if your serveResource() method is actually getting called?
12年前 に Roberto Rodriguez によって更新されました。

RE: Help, download file using SimpleFormController and serveResource

New Member 投稿: 17 参加年月日: 10/08/18 最新の投稿
The method is not called, I do not understand why. emoticon
thumbnail
12年前 に David H Nebinger によって更新されました。

RE: Help, download file using SimpleFormController and serveResource

Liferay Legend 投稿: 14919 参加年月日: 06/09/02 最新の投稿
Do you know if you have the portlet 2.0 jar, or just portlet 1? 2.0 added the serveResource() method...
12年前 に Roberto Rodriguez によって更新されました。

RE: Help, download file using SimpleFormController and serveResource

New Member 投稿: 17 参加年月日: 10/08/18 最新の投稿
I have portlet 2.0 jar