Estoy intentando crear un portlet de mapas con puntos geoposicionados.
Estoy utilizando las librerías java de mapserver, mapscript.jar, la cuales he integrado sin problemas.
Dichas librerías para trabajar necesitan un archivo de configuración para cada mapa, que llamaré mapa.map
En la configuración del portlet he creado la estructura para añadir el archivo, y funciona sin problemas para subirlo, borrarlo o cambiarlo. Pero además me gustaría, que al pinchar sobre el, pudiese descargar el archivo, y es cuando aparecen los problemas.
En el archivo edit_configuration.jsp del portlet he añadido:
<form action="<liferay-portlet:actionURL portletConfiguration="true"/>" class="uni-form" method="post" name="<portlet:namespace />fm_getfile">
<input name="<portlet:namespace /><%= Constants.CMD %>" type="hidden" value="get_file" />
<input name="<portlet:namespace />mapId" type="hidden" value="<%= new Long(plid).toString() %>" />
<%= PrefsParamUtil.getString(prefs, request, "fileName") %></a>
</form>
Y luego en la clase EditConfigurationAction del portlet he creado un metodo para obtener el fichero, que se llama cuando el parametro cmd es igual a get_file (enviado por el formulario):
protected void getFileEntry(int mapId, HttpServletResponse res)
throws Exception {
String fileName = MapFilesLocalServiceUtil.getFileName(mapId);
res.getOutputStream().write(MapFilesLocalServiceUtil.getFileAsBytes(mapId,fileName));
res.getOutputStream().flush();
//InputStream is = MapFilesLocalServiceUtil.getFileAsStream(mapId,fileName);
//ServletResponseUtil.sendFile(res, fileName, is);
//ServletResponseUtil.cleanUp(is);
}
Pero tanto probando con el codigo actual, como con la versión que tengo comentada, me devuelve el mismo error:
18:06:03,891 ERROR [taglib.util.IncludeTag] java.lang.IllegalStateException
at com.liferay.filters.strip.StripResponse.getWriter(StripResponse.java:84)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:326)
at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:342)
at org.apache.jasper.runtime.JspWriterImpl.print(JspWriterImpl.java:468)
at com.liferay.taglib.util.ThemeUtil.includeVM(ThemeUtil.java:201)
...
He estado buscando por los foros de habla inglesa, y he encontrado que el posible problema sea un estado que tiene que tener el portlet para poder enviar el archivo (Exclusive state).
http://www.liferay.com/web/guest/community/forums/message_boards/message/112909
Y no se donde o como indicarle dicho estado al portlet, o si el error está en otro lado. ¿Alguién que ten un portlet en el que se pueda descargar un archivo en la parte de configuración me podría hechar una mano?
Please sign in to flag this as inappropriate.