I have found a solution :-) !

After a little investigation in the displaytag source code, I can say there
is no way to export a CSV file encoded with a different charset from the
JSP.

But I make it possible with the help of this little path :
First I have written a custom Excel specific CSV view extending the default
one as following :

ExcelCSVView class :
--------------------------------------
package org.displaytag.export;

import java.io.IOException;
import java.io.Writer;
import javax.servlet.jsp.JspException;
import org.apache.commons.lang.StringUtils;

public class ExcelCSVView extends CsvView {     
        
        public String getRowEnd() {
                return "\r\n";  //Windows end of line
        }
        
        public String getCellEnd() {
                return ";";     //Excel default cell separator (for french)
        }
        
        public String getMimeType() {
                return "text/csv; charset=cp1252"; //uses the Windows Latin-1 
superset
encoding
        }       
        
        protected String escapeColumnValue(Object value) {               
                String stringValue = StringUtils.trim(value.toString());
                if (!StringUtils.containsNone(stringValue, new char[]{'\n', ';' 
})) {
                        //double '"' as escape sequence for included quote 
symbols
                        return "\"" + StringUtils.replace(stringValue, "\"", 
"\"\"") + "\"";
                }
                return stringValue;
        }
}
------------------------------------

and then, I have added this line in my "displaytag.properties" file :
export.csv.class=org.displaytag.export.ExcelCSVView

and patched the org.displaytag.filter.ExportDelegate class as following :

--- ExportDelegate.java
+++ ExportDelegate.java
@@ -112,124 +112,131 @@
         String characterEncoding = wrapper.getCharacterEncoding();
         String wrappedContentType = wrapper.getContentType();
 
         if (wrappedContentType != null &&
wrappedContentType.indexOf("charset") > -1)
         {
              // charset is already specified (see #921811)
              characterEncoding =
StringUtils.substringAfter(wrappedContentType, "charset=");
         }
 
+        //the target encoding is already specified in contentType :
+        if( contentType.indexOf("charset") > -1) 
+        {
+             characterEncoding=StringUtils.substringAfter(contentType,
"charset=");
+             contentType = contentType.substring(0,
contentType.indexOf(';')).trim();
+        }
+
         if (characterEncoding != null && contentType.indexOf("charset") ==
-1) //$NON-NLS-1$
         {
             contentType += "; charset=" + characterEncoding; //$NON-NLS-1$
         }

That's all.

--Frantz

-- 
View this message in context: 
http://www.nabble.com/Export-in-different-content-type-than-the-page-tf3870606.html#a11460141
Sent from the DisplayTag - General mailing list archive at Nabble.com.


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
displaytag-user mailing list
displaytag-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/displaytag-user

Reply via email to