Null pointer exception thrown when displaying dynamic columns in PDF, Excel 
exports
-----------------------------------------------------------------------------------

                 Key: DISPL-618
                 URL: http://jira.codehaus.org/browse/DISPL-618
             Project: DisplayTag
          Issue Type: Bug
          Components: Export
    Affects Versions: 1.2
            Reporter: Mrudula V
            Priority: Critical
             Fix For: 1.2
         Attachments: Exporttest.jsp

A Map has been taken to store the dynamic values. In the jsp side, i am 
iterating the map to generate dynamic columns as given below : 

--------------------------------------------------------------------Display tag 
in 
jsp-----------------------------------------------------------------------------------------------

 <display:table style="width:80%" id="row" name="test"  class="dataTable" 
cellspacing="1" cellpadding="2" export="true"  pagesize="10" 
     decorator="com.jamocha.util.Wrapper">
    <display:caption media="pdf excel html" class="header">Student 
List</display:caption>   
    
    <display:column property="name" title="Name" class="text" 
headerClass="text" sortable="true"/>
    <display:column property="studyClass" title=" Study Class" class="text" 
headerClass="text" sortable="true"/>
    <display:column property="totalMarks" title="Total Marks" class="numeric" 
headerClass="numeric" media="html"  sortable="true"/>
    <display:column property="totalMarks" title="Total Marks" class="numeric" 
media="pdf" headerClass="textAlignment"  sortable="true"/>
    <display:column property="percentage" title="Percentage" class="numeric" 
headerClass="numeric" sortable="true"/>
    <%
       int rowNumberInt = 0;
           Student reportVO = l.get((++rowNumberInt) -1);
         for(int i =1; i<=10;i++)
         {          
          String avgVal = reportVO.getAvgValueMap().get(i)+"";%>
          <display:column value="<%=avgVal%>" title="<%="Avg_"+i%>" 
format="{0,number,00.00}" headerClass="numeric" maxLength="10" class="numeric"  
sortable="true"/>
     <% }%> 
  </display:table>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

The code is working fine for Html. i.e the dynamic columns are getting 
generated in Html.
Whereas, for exports we have written our own class which extends 
BinaryExportView Class.

In pdf to generate the dynamic columns we have written a code something similar 
to as given below :

------------------------------------------------------------------In pdf 
-------------------------------------------------------------------------------------------------------------

private void generateTableModelFromRequest()
        {
                // creating new table model n setting properties to old one
                try
                {
                        TableProperties tableprop = this.model.getProperties();
                        List exportList = (List) 
this.model.getTableDecorator().getPageContext().getRequest().getAttribute(this.model.getId());
                        TableModel tableModel = new TableModel(tableprop, 
"ISO-8859-1", this.model.getTableDecorator().getPageContext());
                        // tableModel.setCaption(model.getCaption());
                        // 
tableModel.setTableDecorator(model.getTableDecorator());
                        tableModel.setMedia(this.model.getMedia());

                        // Adding header cell from existing model to our new 
tableModel and getting method names
                        Iterator itrHeader = 
this.model.getHeaderCellList().iterator();
                        String[] methodArray = new 
String[this.model.getNumberOfColumns()];
                        int count = 0;
                        while (itrHeader.hasNext())
                        {
                                HeaderCell headercell = new HeaderCell();
                                headercell = (HeaderCell) itrHeader.next();
                                tableModel.addColumnHeader(headercell);
                                if (headercell.getBeanPropertyName() == null)
                                {
                                        methodArray[count++] = null;
                                }
                                else
                                {
                                        methodArray[count++] = "get" + 
StringUtils.capitalize(headercell.getBeanPropertyName());
                                }
                        }

                        // iterating through new list and creating cell and 
rows and adding to new table model
                        int rowNo = 1;
                        Iterator expotListItr = exportList.iterator();
                        org.displaytag.model.Cell cell = null;
                        Row row = null;
                        while (expotListItr.hasNext())
                        {
                                Object exportRowObj = expotListItr.next();
                                row = new Row(exportRowObj, rowNo);
                                ColumnIterator columnIterator = 
row.getColumnIterator(this.model.getHeaderCellList());

                                for (int i = 0; i < 
tableModel.getNumberOfColumns(); i++)
                                {
                                        Object cellValue = null;
                                        Column column = null;
                                        if (columnIterator.hasNext())
                                        {
                                                try
                                                {
                                                        column = 
columnIterator.nextColumn();
                                                }
                                                catch (Exception e)
                                                {
                                                        
ManagerLogger.out.error("Exception" + e);
                                                }
                                        }
                                        if (methodArray[i] != null)
                                        {
                                                cellValue = 
processMethodOnObject(exportRowObj, methodArray[i]);
                                                System.out.println("Cell value 
::::" + cellValue);
                                        }
                                        else if (column != null)
                                        {
                                                cellValue = 
column.getValue(false);
                                                System.out.println("Dynamic 
Cell value ::::" + cellValue);
                                        }
                                        cell = new 
org.displaytag.model.Cell(cellValue);
                                        row.addCell(cell);
                                        columnIterator = 
row.getColumnIterator(this.model.getHeaderCellList());
                                        for (int j = 0; j <= i; j++)
                                        {
                                                if (columnIterator.hasNext())
                                                {
                                                        
columnIterator.nextColumn();
                                                }
                                        }
                                }
                                tableModel.addRow(row);
                        }

                        // setting the previous table model(model)row list page 
to new table model's(tableModel)
                        // full page.
                        // This will export entire data which is in new table 
model(tableModel)
                        this.model.setRowListPage(tableModel.getRowListFull());
                }
                catch (Exception e)
                {
                        ManagerLogger.out.error("Exception", e);
                }
        }

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

With the above code though the dynamic columns are getting displayed in PDf and 
Excel export, in the tomcat console a "NULLPointer Exception" is getting thrown 
near the line:

cellValue = column.getValue(false);

If the boolean value is given as true, then there is no NULL Pointer exception 
, but columns in pdf and excel are showing empty.

It would be great if you can find a solution for this. This is the first time 
that I am raising an issue in forum.So, I have don't have any idea of what all 
the files I need to attach for you to understand the problem much easier.Please 
suggest if any fursther details are required.





-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT 
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian 
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
displaytag-devel mailing list
displaytag-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/displaytag-devel

Reply via email to