Foros de discusión

Mostrar imagen en portlet Struts 2

Vanesa Bautista, modificado hace 9 años.

Mostrar imagen en portlet Struts 2

New Member Mensajes: 11 Fecha de incorporación: 3/03/11 Mensajes recientes
Buenas,
a ver si alguien puede ayudarme. Llevo bastante tiempo intentando resolver esto pero no consigo dar con la clave. Estoy desarrollando para la versión 6.1.2 ce ga3 de Liferay un portlet de tipo Jsr168Dispatcher, que accede a una base de datos externa para obtener una serie de imágenes de ella, que necesito mostrar por pantalla.
El fichero struts.xml contiene lo siguiente:

 
      <package name="entidades" extends="struts-portlet-default" namespace="/entidades">

   		<action name="index" class="entidadesAction">
      		<result name="success">/jsp/entidades.jsp</result>
   		</action>  		
   		<action name="inicio" class="entidadesAction" method="execute">
      		<result name="success">/jsp/entidades.jsp</result>
   		</action>  		
		<action name="cargarImagenEntidad" method="cargarImagenEntidad" class="entidadesAction">
			<result name="success" type="stream"></result>
		</action>
		
      </package>


El página jsp intento mostar la imagen de la siguiente forma:

<s:iterator value="listaEntidades" var="entidad">
      <li>
         <img src="<s:url action='cargarImagenEntidad' namespace=" entidades"><s:param name="idEntidadImagen"><s:property value="entidadHGA.id" /></s:param>"/&gt;
      </li>
</s:iterator>


Y por último este es mi action:


.......

        /**
	 * 
	 * @return
	 */
	public String cargarImagenEntidad()
	{
		final PortletResponse portletResponse = (PortletResponse) servletRequest
				.getAttribute("javax.portlet.response");
		RenderResponse renderResponse = (RenderResponse) servletRequest.getSession()
				.getAttribute("render");
			
		if (renderResponse == null &amp;&amp; portletResponse instanceof RenderResponse) {
		    renderResponse = (RenderResponse) portletResponse;
		}
		
		renderResponse.setContentType("image/png");
		for(EntidadPortal entidad: listaEntidades)
		{
			if(idEntidadImagen.equals(entidad.getEntidadHGA().getId().toString()))	
			{
				final EntidadDTO entidadImagen = entidad.getEntidadHGA();
				
				try
				{			
					renderResponse.getPortletOutputStream().write(entidadImagen.getImagen());
					renderResponse.getPortletOutputStream().flush();
					
				}catch (IOException e){
					LOG.error(e.getMessage(), e);
				}
			}

		}
		return SUCCESS;
	}

.....


El error que muestra la consola cuando intento ejecutarlo es el siguiente:
ERROR [Jsr168Dispatcher:38] Could not execute action
java.lang.IllegalArgumentException: image/png is not a supported mime type

He probado a cambiar la propiedad mime-type del fichero portlet.xml :

<supports>
	      <mime-type>image/png</mime-type>
	      <portlet-mode>view</portlet-mode>
</supports>


Pero si realizo este cambio, el portlet no despliega emoticon

¿Alguien puede ayudarme?

Gracias de antemano
Vanesa Bautista, modificado hace 9 años.

RE: Mostrar imagen en portlet Struts 2

New Member Mensajes: 11 Fecha de incorporación: 3/03/11 Mensajes recientes
Buenas!!

Por si a alguien le sirve de ayuda, al final lo he solucionado con un servlet.

He definido en mi fichero web.xml el servlet para mostrar la imagen:

<servlet>
		<servlet-name>ImageDisplayServlet</servlet-name>
		<servlet-class> com.vbautista.entidades.ImageDisplayServlet</servlet-class>
</servlet>
	
<servlet-mapping>
        <servlet-name>ImageDisplayServlet</servlet-name>
        <url-pattern>/ObtenerImagenServlet</url-pattern>
    </servlet-mapping>


Y en mi página jsp la llamada a dicho servlet:

<li>
	<img src="/Entidades-portlet/ObtenerImagenServlet?idEntidad=<s:property value=" id">" width="148" /&gt;
</li>


Con esto he conseguido mostrar las imágenes. La última etiqueta "action" del fichero de struts y el cambio en el fichero portlet.xml ya no hacían falta y toda la lógica que muestra la imagen la he sacado del action y la realizo en dicho servlet.

Saludos!!