【完美解决ecside2.0RC1在weblogic8.1.6环境下导出xls,csv 文件为空的情况】~法老修正完整版!

法老最先原创自: http://ecside.group.javaeye.com/group/topic/3002

今天是中秋节哟~~
--------------------------------------------
这2天一直在努力解决ecside2.0RC1在weblogic8.1.6环境下导出xls,csv 文件为空的情况~
期间 xiaotiaotiao 的一篇帖子给我不少灵感~
-------------------------------------
在1.3版本里对比看了下
发现XlsView里面的用到的outputstream
改为1.3版本的ByteArrayOutputStream
同时在beforeBody里改为outputStream=new ByteArrayOutputStream
-----------------------------------------------------------
于是我就尝试改了一下csvView.java结果成功了~开心了半天~
但是,用同样方法的处理xlsView.java却一直不成功,继续郁闷......
今天,我干脆从头到尾把csvView,xlsView做了一下比较和研究~发现xlsView是比csvView缩水处理了~~呵呵
注意原版xlsView和csvView在以下片段不同~
private ByteArrayOutputStream outputStream ;
private ByteArrayOutputStream outputStreamOut;
private PrintWriter out =null;
csvView 是定义了以上3个供输出的属性~而xlsView只有 outputStream 这一个!!
今天偶然又看了一下XlsViewResolver.java文件。。发现问题了~~~居然里面的代码给注释掉了...
这时候我在看xlsView的afterBody方法 发现直接返回outputStream对象~~
********************************************************
可能fins的本来的想法是直接把xls流提交给IE浏览器,让它自己解析出XLS文件下载~
没有使用PrintWriter方法输出!!事实证明TOMCAT5.5是可以的,WEBLOGIC就不可以~
********************************************************
好了,问题找到了·解决起来就快了~~~~
参考CsvView,CsvViewResolver对XlsView,XlsViewResolver做了修改
总结如下(Weblogic8.1.6,JDK1.4环境;TOMCAT 5.5 JDK1.6环境全部通过):

/* Copyright 2006-2007 original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    
http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 
*/

package  org.ecside.view;

import  java.io.ByteArrayOutputStream;
import  java.io.IOException;
import  java.io.PrintWriter;
import  java.util.ArrayList;
import  java.util.Iterator;
import  java.util.List;

import  jxl.Cell;
import  jxl.Workbook;
import  jxl.format.Border;
import  jxl.format.BorderLineStyle;
import  jxl.format.CellFormat;
import  jxl.format.Colour;
import  jxl.write.Blank;
import  jxl.write.Label;
import  jxl.write.Number;
import  jxl.write.NumberFormat;
import  jxl.write.WritableCellFormat;
import  jxl.write.WritableFont;
import  jxl.write.WritableSheet;
import  jxl.write.WritableWorkbook;
import  jxl.write.WriteException;
import  jxl.write.biff.RowsExceededException;

import  org.apache.commons.lang.StringUtils;
import  org.apache.commons.logging.Log;
import  org.apache.commons.logging.LogFactory;
import  org.ecside.common.log.LogHandler;
import  org.ecside.core.ECSideContext;
import  org.ecside.core.TableModel;
import  org.ecside.core.bean.Column;
import  org.ecside.preferences.PreferencesConstants;
import  org.ecside.table.calc.CalcResult;
import  org.ecside.table.calc.CalcUtils;
import  org.ecside.util.ECSideUtils;
import  org.ecside.util.ExportViewUtils;
import  org.ecside.util.ExtremeUtils;
import  org.htmlparser.Node;
import  org.htmlparser.NodeFilter;
import  org.htmlparser.Parser;
import  org.htmlparser.nodes.TagNode;
import  org.htmlparser.tags.TableColumn;
import  org.htmlparser.tags.TableRow;
import  org.htmlparser.tags.TableTag;
import  org.htmlparser.util.NodeList;

/**
 * 
@author Wei Zijun
 * @editor by pharaohsprince 法老 
 *         
http://blog.csdn.net/pharaohsprince
 *         2007.09.25  中秋节
 
*/


/**
 * com.extremecomp.table.view.XlsView.java -
 *
 * 
@author paul horn
 
*/


public   class  XlsView  implements  View  {
    
private Log logger = LogFactory.getLog(XlsView.class);
    
public static final int WIDTH_MULT = 240// width per char
    public static final int MIN_CHARS = 8// minimum char width
    public static final short DEFAULT_FONT_HEIGHT = 8;
    
public static final double NON_NUMERIC = -.99999;
    
public static final String DEFAULT_MONEY_FORMAT = "$###,###,##0.00";
    
public static final String DEFAULT_PERCENT_FORMAT = "##0.0%";
    
public static final String NBSP = " ";
    
    
public static final int colWidth=15;

    
private WritableWorkbook wb;
    
private WritableSheet sheet;

    
private int rownum;
    
private short cellnum;

    
private String moneyFormat;
    
private String percentFormat;
    
private ByteArrayOutputStream  outputStream ;
    
private ByteArrayOutputStream  outputStreamOut;
    
private PrintWriter out =null;
    
    
private String encoding;

    
public XlsView() {
        encoding
=ECSideContext.ENCODING;
    }


    
public void beforeBody(TableModel model) {
        logger.debug(
"XlsView.init()");
        
        outputStream
=new ByteArrayOutputStream(); 
        outputStreamOut
=outputStream;
        out
=new PrintWriter(outputStream);
        
        moneyFormat 
= model.getPreferences().getPreference(PreferencesConstants.TABLE_EXPORTABLE + "format.money");
        
if (StringUtils.isEmpty(moneyFormat)) {
            moneyFormat 
= DEFAULT_MONEY_FORMAT;
        }

        percentFormat 
= model.getPreferences().getPreference(PreferencesConstants.TABLE_EXPORTABLE + "format.percent");
        
if (StringUtils.isEmpty(percentFormat)) {
            percentFormat 
= DEFAULT_PERCENT_FORMAT;
        }


//        encoding = model.getExportHandler().getCurrentExport().getEncoding();

        
        
try {
            wb 
= Workbook.createWorkbook(outputStream);
            sheet 
= wb.createSheet("Export Workbook",0);
            createHeader(model);
//            int totalCol=model.getColumnHandler().getColumns().size();

            rownum
++;
            
            String extendRowBefore
=(String)(model.getTable().getAttribute("ExtendRowBefore"));
            rownum
+=createRow(sheet, getRows(extendRowBefore,encoding),(CellFormat)WritableWorkbook.NORMAL_STYLE, rownum,0)-1;
            
        }
 catch (Exception e) {
            LogHandler.errorLog(logger, e);
        }

  
      
    }

    
    
    
public static TableRow[] getRows(String inputHtml,String encode) throws Exception {
        
if (StringUtils.isBlank(inputHtml)){
            
return null;
        }

        inputHtml
=inputHtml.trim();
        
if (!inputHtml.startsWith("<table>")&&!inputHtml.startsWith("<TABLE>") ){
            inputHtml
="<table>"+inputHtml+"</table>";
        }

        Parser parser 
= Parser.createParser(inputHtml, encode);
        NodeList nodes 
= parser.extractAllNodesThatMatch(new NodeFilter() {
            
public boolean accept(Node node) {
                
return node instanceof TagNode;
            }

        }
);
        TagNode node 
= (TagNode)nodes.elementAt(0);
        
        
return ((TableTag)node).getRows();
    }

    
    
public static int getColumnNum(TableRow row){
        
int totalCol=0;
        
        TableColumn[] columns
=row.getColumns();
        
        
for (int cn=0;cn<columns.length;cn++){
            String colspan
=columns[cn].getAttribute("colspan");
            
if (colspan!=null&&colspan.length()>0){
                
try{
                    totalCol
+=Integer.parseInt(colspan);
                    
continue;
                }
catch(Exception e){}
            }

            totalCol
++;
        }

        
        
return totalCol;
        
    }

    
    
public static int createRow(WritableSheet sheet,TableRow[] tableRows,CellFormat cellFormat,int startRow,int startCol) throws RowsExceededException, WriteException{

        
if (tableRows==null||tableRows.length<1return 0; }
        
int totalCol=getColumnNum(tableRows[0]);
//                 CellFormat cellFormat=(CellFormat)WritableWorkbook.NORMAL_STYLE;
                int colWidth=15;
            
            List mergeCells
=new ArrayList();
                
for (int rowNo=startRow;rowNo<startRow+tableRows.length;rowNo++ ){
                    
int idx=0;
                    
for (int colNo=startCol;colNo<startCol+totalCol;colNo++){
                    Cell cell
=sheet.getCell(colNo,rowNo);
                    
if (cell instanceof Blank) {
                        
continue;
                    }

                    TableColumn tdBean
=((TableRow)tableRows[rowNo-startRow]).getColumns()[idx];
                    String title
=ECSideUtils.specialHTMLToShowTEXT(tdBean.toPlainTextString());
                    
                    Label label
=new Label(colNo,rowNo,title,cellFormat); 
                    sheet.addCell(label);
                    sheet.setColumnView(colNo, colWidth);
                    idx
++;                 
                        
int ce=Integer.parseInt(ECSideUtils.convertString(tdBean.getAttribute("colspan"),"1"))-1;
                        
int re=Integer.parseInt(ECSideUtils.convertString(tdBean.getAttribute("rowspan"),"1"))-1;
                        
                        
if (ce>=1 || re>=1){
                            ce
=ce<0?0:ce;
                            re
=re<0?0:re;
                            mergeCells.add(
new int[]{colNo,rowNo,colNo+ce,rowNo+re});
                            
if (ce<1 && re>=1){
                                
for (int srowNo=1;srowNo<=re; srowNo++){
                                    sheet.addCell(
new Blank(colNo,rowNo+srowNo));
                                    sheet.setColumnView(colNo, colWidth);
                                }

                                
continue;
                            }
else if (re<1 && ce>=1){
                                
for (int scolNo=1;scolNo<=ce;scolNo++){
                                    sheet.addCell(
new Blank(colNo+scolNo,rowNo));
                                    sheet.setColumnView(colNo
+scolNo, colWidth);
                                }

                                colNo
+=ce;
                                
continue;
                            }
else if (ce>=1 && re>=1){
                                
for (int scolNo=1;scolNo<=ce;scolNo++){
                                    
for (int srowNo=1;srowNo<=re; srowNo++){
                                        sheet.addCell(
new Blank(colNo+scolNo,rowNo+srowNo));
                                        sheet.setColumnView(colNo
+scolNo, colWidth);
                                    }

                                }

                                colNo
+=ce;
                                
continue;
                            }

                        }

                    }


                }


                
for (int i=0;i<mergeCells.size();i++){
                    
int[] mc=(int[])mergeCells.get(i);
                    sheet.mergeCells(mc[
0],mc[1],mc[2],mc[3]);
                }


        
return tableRows.length;
    }

    
   
    
private void createHeader(TableModel model) throws RowsExceededException, WriteException {
        rownum 
= 0;
        cellnum 
= 0;
        
int etr=0;
        
//HSSFRow row = sheet.createRow(rownum);

        
        WritableCellFormat cellFormat
=new WritableCellFormat();
        WritableFont arial10font 
= new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.BOLD); 
        cellFormat.setBackground(Colour.GRAY_25);
        cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN,Colour.GRAY_50);
        cellFormat.setFont(arial10font);
        
        
boolean showHeader=model.getTable().isShowHeader();

        List columns 
= model.getColumnHandler().getHeaderColumns();
        

        String extendRowTop
=(String)(model.getTable().getAttribute("ExtendRowTop"));
        
        
try {
            etr
=createRow(sheet, getRows(extendRowTop,encoding),cellFormat, rownum,0);
        }
 catch (Exception e) {
            LogHandler.warnLog(logger, e);
            etr
=0;
        }

        rownum
+=etr;
        

        
if (showHeader || etr<1){
            
for (Iterator iter = columns.iterator(); iter.hasNext();) {
                Column column 
= (Column) iter.next();
                String title 
= column.getCellDisplay();
                
                Label label
=new Label(cellnum,rownum,title,cellFormat); 
                
                sheet.addCell(label);
    
                
int valWidth = (title + "").length() ;
                valWidth
=1;
                sheet.setColumnView(cellnum, valWidth
*colWidth);
    
                cellnum
++;
            }

        }
else{
            
if (rownum>0){
                rownum
--;
            }

        }


    }

    
public void body(TableModel model, Column column) {
        
if (column.isFirstColumn()) {
            rownum
++;
            cellnum 
= 0;
            
        }


        
try {

            String value 
= ExportViewUtils.parseXLS(column.getCellDisplay());

            
if (column.isEscapeAutoFormat()) {

                writeToCellAsText(value, 
null);

            }
 else {
                writeToCellFormatted(value, 
null);
            }

            cellnum
++;

        }
 catch (RowsExceededException e) {
            
// TODO Auto-generated catch block
            LogHandler.errorLog(logger, e);
        }
 catch (WriteException e) {
            
// TODO Auto-generated catch block
            LogHandler.errorLog(logger, e);
        }

    }


    
public Object afterBody(TableModel model) {
        
if (model.getLimit().getTotalRows() != 0{
            
try {
                totals(model);
            }
 catch (RowsExceededException e) {
                
// TODO Auto-generated catch block
                LogHandler.errorLog(logger, e);
            }
 catch (WriteException e) {
                
// TODO Auto-generated catch block
                LogHandler.errorLog(logger, e);
            }

        }

       
        
try {
//            int totalCol=model.getColumnHandler().getColumns().size();
            rownum++;
            String extendRowAfter
=(String)(model.getTable().getAttribute("ExtendRowAfter"));
            rownum
+=createRow(sheet, getRows(extendRowAfter,encoding),(CellFormat)WritableWorkbook.NORMAL_STYLE, rownum,0);
            
            wb.write();
            wb.close();
            
            out.flush();
            out.close();
        }
 catch (WriteException e) {
            LogHandler.warnLog(logger, e);
        }
 catch (IOException e) {
            LogHandler.warnLog(logger, e);
        }
 catch (Exception e) {
            LogHandler.warnLog(logger, e);
        }

        
return outputStreamOut;
    }




    
private void writeToCellAsText( String value, WritableCellFormat styleModifier) throws RowsExceededException, WriteException {
        
// format text
        if (value.trim().equals(NBSP)) {
            value 
= "";
        }

        Label label
=new Label(cellnum,rownum,value); 
        
if (styleModifier!=null){
            label.setCellFormat(styleModifier);
        }

        sheet.addCell(label);

    }


    
private void writeToCellFormatted( String value, WritableCellFormat styleModifier) throws RowsExceededException, WriteException {
        
double numeric = NON_NUMERIC;

        
try {
            numeric 
= Double.parseDouble(value);
        }
 catch (Exception e) {
            numeric 
= NON_NUMERIC;
        }


        
if (value.startsWith("$"|| value.endsWith("%"|| value.startsWith("($")) {
            
boolean moneyFlag = (value.startsWith("$"|| value.startsWith("($"));
            
boolean percentFlag = value.endsWith("%");

            value 
= StringUtils.replace(value, "$""");
            value 
= StringUtils.replace(value, "%""");
            value 
= StringUtils.replace(value, ",""");
            value 
= StringUtils.replace(value, "(""-");
            value 
= StringUtils.replace(value, ")""");

            
try {
                numeric 
= Double.parseDouble(value);
            }
 catch (Exception e) {
                numeric 
= NON_NUMERIC;
            }


            
if (moneyFlag) {
                
// format money
                NumberFormat fivedps = new NumberFormat(moneyFormat); 
                WritableCellFormat fivedpsFormat 
= new WritableCellFormat(fivedps); 
                Number number 
= new Number(cellnum, rownum, numeric, fivedpsFormat); 
                
if (styleModifier!=null){
                    number.setCellFormat(styleModifier);
                }

                sheet.addCell(number); 
             }
 else if (percentFlag) {
                
// format percent
                numeric = numeric / 100;
                
                NumberFormat fivedps 
= new NumberFormat(percentFormat); 
                WritableCellFormat fivedpsFormat 
= new WritableCellFormat(fivedps); 
                Number number 
= new Number(cellnum, rownum, numeric, fivedpsFormat);
                
if (styleModifier!=null){
                    number.setCellFormat(styleModifier);
                }

                sheet.addCell(number);
            }

        }
 else if (Math.abs(numeric - NON_NUMERIC) >= .0000001{
            
// numeric != NON_NUMERIC
            
// format numeric
            Number number = new Number(cellnum, rownum, numeric); 
            
if (styleModifier!=null){
                number.setCellFormat(styleModifier);
            }

            sheet.addCell(number); 
        }
 else {
            
// format text
            if (value.trim().equals(NBSP)) {
                value 
= "";
            }

            Label label
=new Label(cellnum,rownum,value); 
            
if (styleModifier!=null){
                label.setCellFormat(styleModifier);
            }

            sheet.addCell(label);
        }


    }





    
// Add to export totals
    public void totals(TableModel model) throws RowsExceededException, WriteException {
        Column firstCalcColumn 
= model.getColumnHandler().getFirstCalcColumn();
        
        WritableCellFormat cellFormatTotals
=new WritableCellFormat();
        cellFormatTotals.setBackground(Colour.GRAY_25);
        cellFormatTotals.setBorder(Border.ALL, BorderLineStyle.THIN,Colour.GRAY_50);
        
      
        
        
if (firstCalcColumn != null{
            
int rows = firstCalcColumn.getCalc().length;
            
for (int i = 0; i < rows; i++{
                rownum
++;
                cellnum 
= 0;
                
for (Iterator iter = model.getColumnHandler().getColumns().iterator(); iter.hasNext();) {
                    Column column 
= (Column) iter.next();
                    
if (column.isFirstColumn()) {
                        String calcTitle 
= CalcUtils.getFirstCalcColumnTitleByPosition(model, i);
                        
                        
if (column.isEscapeAutoFormat()) {

                            writeToCellAsText(calcTitle, cellFormatTotals);

                        }
 else {
                            writeToCellFormatted(calcTitle, cellFormatTotals);
                        }

  
                        cellnum
++;
                        
continue;
                    }


  
                    
if (column.isCalculated()) {
                        

                        
                        CalcResult calcResult 
= CalcUtils.getCalcResultsByPosition(model, column, i);
                        java.lang.Number value 
= calcResult.getValue();

                        
if (value != null){
                            
//if (column.isEscapeAutoFormat()) {
                            
//    writeToCellAsText( value.toString(), cellFormatTotals);
                            
//} else {
                            
//    writeToCellFormatted( ExtremeUtils.formatNumber(column.getFormat(), value, model.getLocale()), cellFormatTotals);
                           
// }
                            if (StringUtils.isNotBlank(column.getFormat())){
                                writeToCellFormatted( ExtremeUtils.formatNumber(column.getFormat(), value, model.getLocale()), cellFormatTotals);
                            }
else{
                                 writeToCellAsText( value.toString(), cellFormatTotals);
                            }

                        }
 else {
                             Label label
=new Label(cellnum,rownum,"n/a"); 
                             sheet.addCell(label);
                        }

                        cellnum
++;
                    }
 else {
                        writeToCellFormatted( 
"", cellFormatTotals);
                        cellnum
++;
                    }

                }

            }

        }


    }


}


/*
 * Copyright 2006-2007 original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    
http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 
*/

package  org.ecside.view;

import  java.io.ByteArrayOutputStream;

import  javax.servlet.ServletRequest;
import  javax.servlet.ServletResponse;

import  org.ecside.core.Preferences;


/**
 * 
@author Wei Zijun
 * @editor by pharaohsprince 法老 
 *         
http://blog.csdn.net/pharaohsprince
 *         2007.09.25  中秋节
 
*/


public   class  XlsViewResolver  implements  ViewResolver  {
    
public void resolveView(ServletRequest request, ServletResponse response, Preferences preferences, Object viewData) throws Exception {
        
if (viewData!=null){
            ByteArrayOutputStream out 
= (ByteArrayOutputStream)viewData;
            
byte[] contents = out.toByteArray();
            response.setContentLength(contents.length);
            response.getOutputStream().write(contents);
        }

    }

}


/*
 * Copyright 2004 original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    
http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 
*/

package  org.ecside.view;

import  java.io.ByteArrayOutputStream;
import  java.io.PrintWriter;
import  java.util.Iterator;
import  java.util.List;

import  org.apache.commons.lang.StringUtils;
import  org.ecside.core.TableModel;
import  org.ecside.core.bean.Column;
import  org.ecside.core.bean.Export;
import  org.ecside.table.calc.CalcResult;
import  org.ecside.table.calc.CalcUtils;
import  org.ecside.util.ExportViewUtils;
import  org.ecside.util.ExtremeUtils;

/**
 * For producing a delimited datafile view of the table. Default delimiter is
 * comma.
 * 
 * 
@author Wei Zijun
 * @editor by pharaohsprince 法老 
 *         
http://blog.csdn.net/pharaohsprince
 *         2007.09.25  中秋节
 
*/

public   class  CsvView  implements  View  {
    
public final static String DELIMITER = "delimiter";
    
final static String DEFAULT_DELIMITER = ",";
//    private StringBuffer plainData = new StringBuffer();
    private ByteArrayOutputStream  outputStream ;
    
private ByteArrayOutputStream  outputStreamOut;
    
private StringBuffer rowBuffer =null;
    
private PrintWriter out =null;
    
private String delimiter;

    
    
public void beforeBody(TableModel model) {
        outputStream
=new ByteArrayOutputStream(); 
        outputStreamOut
=outputStream; 
        
/*
        outputStream=ContextUtils.getResponseOutputStream(model.getContext());
        
        outputStreamOut=null;
        if (outputStream==null){
            outputStream=new ByteArrayOutputStream();
            outputStreamOut=outputStream;
        }
*/

        out
=new PrintWriter(outputStream);
        Export export 
= model.getExportHandler().getCurrentExport();
        delimiter 
= export.getAttributeAsString(DELIMITER);
        
        List columns 
= model.getColumnHandler().getHeaderColumns();
        
if (StringUtils.isBlank(delimiter)) {
            delimiter 
= DEFAULT_DELIMITER;
        }

        
boolean isFirstColumn=true;
        
        rowBuffer 
= new StringBuffer();
        
for (Iterator iter = columns.iterator(); iter.hasNext();) {
            Column column 
= (Column) iter.next();
            
            String value 
= ExportViewUtils.parseCSV(column.getCellDisplay());
            
if (!isFirstColumn){
                rowBuffer.append(delimiter);
            }

            rowBuffer.append(value);
            isFirstColumn
=false;            
        }

        
if (columns.size()>0){
            rowBuffer.append(ExportViewUtils.BR);
            writeToOutputStream(rowBuffer.toString());
        }

        

    }


    
    
public void body(TableModel model, Column column) {
 
        String value 
= ExportViewUtils.parseCSV(column.getCellDisplay());
        rowBuffer.append(value);
        
if (column.isLastColumn()) {
            rowBuffer.append(ExportViewUtils.BR);
            writeToOutputStream(rowBuffer.toString());
        }
else{
            rowBuffer.append(delimiter);
        }

            
    }


    
public Object afterBody(TableModel model) {
        totals(model);
        out.flush();
        out.close();
        
return outputStreamOut;
    }

    
    
public void totals(TableModel model) {
        
        rowBuffer 
= new StringBuffer();
        
        Column firstCalcColumn 
= model.getColumnHandler().getFirstCalcColumn();

        
if (firstCalcColumn != null{
            
int rows = firstCalcColumn.getCalc().length;
            
for (int i = 0; i < rows; i++{

                
for (Iterator iter = model.getColumnHandler().getColumns().iterator(); iter.hasNext();) {

                    Column column 
= (Column) iter.next();
                    
if (column.isFirstColumn()) {
                        String calcTitle 
= CalcUtils.getFirstCalcColumnTitleByPosition(model, i);
                        rowBuffer.append(ExportViewUtils.parseCSV(calcTitle) );
                        
continue;
                    }

                    rowBuffer.append(delimiter);
                    
if (column.isCalculated()) {
                        CalcResult calcResult 
= CalcUtils.getCalcResultsByPosition(model, column, i);
                        java.lang.Number value 
= calcResult.getValue();
                        
if (value != null){
                            
if (StringUtils.isNotBlank(column.getFormat())){
                                rowBuffer.append(ExportViewUtils.parseCSV(ExtremeUtils.formatNumber(column.getFormat(), value, model.getLocale())));
                            }
else{
                                rowBuffer.append(ExportViewUtils.parseCSV(value.toString()) );
                            }

                        }
 else {
                            rowBuffer.append(ExportViewUtils.parseCSV(
""));
                        }

                    }
 else {
                        rowBuffer.append(ExportViewUtils.parseCSV(
""));
                    }

                }

                
                rowBuffer.append(ExportViewUtils.BR);
                writeToOutputStream(rowBuffer.toString());
            }

        }


    }



    
public void writeToOutputStream(String rowContent){
            out.print(rowContent);
            rowBuffer 
= new StringBuffer();
    }


}


/*
 * Copyright 2004 original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    
http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 
*/

package  org.ecside.view;

import  java.io.ByteArrayOutputStream;

import  javax.servlet.ServletRequest;
import  javax.servlet.ServletResponse;

import  org.ecside.core.Preferences;

/**
 * 
@author Jeff Johnston
 
*/

/**
 * @editor by pharaohsprince 法老 
 *         
http://blog.csdn.net/pharaohsprince
 *         2007.09.25  中秋节
 
*/

public   class  CsvViewResolver  implements  ViewResolver  {
    
public void resolveView(ServletRequest request, ServletResponse response, Preferences preferences, Object viewData) throws Exception {
        
        
if (viewData!=null){
            ByteArrayOutputStream out 
= (ByteArrayOutputStream)viewData;
            
byte[] contents = out.toByteArray();
            response.setContentLength(contents.length);
            response.getOutputStream().write(contents);
        }

    }

}


------------------------------------------------------------------
说明:编译ECSIDE2.0RC1的源代码,把以上文件修改后编译,把新的CLASS复制到JAR文件里覆盖对应文件即可~
打包好的jar文件
参考CsvView,CsvViewResolver对XlsView,XlsViewResolver做了修改
删除了原有的log4j配置文件·

 

ecside_2.0_RC1_by_pharaohs.jar
 描述:  【完美解决ecside2.0RC1在weblogic8.1.6环境下导出xls,csv 文件为空的情况】~法老修正完整版之JAR包
下载
 文件名:  ecside_2.0_RC1_by_pharaohs.jar
 文件大小:  360 KB
 下载过的:  文件被下载或查看 386 次

你可能感兴趣的:(【完美解决ecside2.0RC1在weblogic8.1.6环境下导出xls,csv 文件为空的情况】~法老修正完整版!)