cmaheshwari16 0 Newbie Poster

Hi All,

I am little bit new to struts framework though I have used tiles in struts application. Now I want to display charts in my application. After searching I found jFreechart library to create charts. (Though it doesn't generate all the charts, like box in web application).

Now I also found some link on how to use jFreechart in struts application. Though the post are not much descriptive, I tried in the same way to incorporate the chart functionality but it is not working......

Can someone please provide the entries to be made in struts.xml, web.xml to make this functionality work.

Pls find below the different files I am using to run my application.
I have made the changes that I made for graph functionality in bold

Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
 <!-- 
<package name="actionGraph" namespace="/actionGraph" extends="jfreechart-default"> 
<action name="Graph" class="graph.Graph">
 <result name="success" type="chart">
   <param name="value">chart</param>
   <param name="type">png</param>
   <param name="width">640</param>
   <param name="height">480</param>
 </result>

</action>
</package> 
-->



<package name="portal" namespace="/portal" extends="struts-default , [B]jfreechart-default[/B]
">

<result-types>
  <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>

	[B]<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult">
		<param name="height">150</param>
		<param name="width">200</param>
	</result-type>[/B]


</result-types>


<global-results>  
  <result name="error">/pages/error.jsp</result>  
</global-results>  
     
<global-exception-mappings>  
   <exception-mapping exception="java.lang.NullPointerException" result="error"/>  
   <exception-mapping exception="java.lang.NumberFormatException" result="error"/>  
   <exception-mapping exception="java.lang.Exception" result="error"/>  
</global-exception-mappings>  


<action name="Login" class="graph.Login">
  <result name="success">/pages/display.jsp</result>
  <result name="error">/pages/login.jsp</result>
  <result name="input">/pages/login.jsp</result>
</action>

[B]<action name="Graph" class="graph.Graph">
 <result name="success" type="chart">
   <param name="value">chart</param>
   <param name="type">png</param>
   <param name="width">640</param>
   <param name="height">480</param>
   
 </result>
 <result name="error">/pages/display.jsp</result>
  
</action>
[/B]
</package>
</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>graphFunctionWeb</display-name>
  
  <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
  
  <filter>
 	<filter-name>Tiles Filter</filter-name>
	<filter-class>org.apache.tiles.web.startup.TilesFilter</filter-class>
        <init-param>
        	<param-name>
	          org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
	        </param-name>
        	<param-value>
	          /WEB-INF/tiles-defs.xml,/org/apache/tiles/classpath-defs.xml
	        </param-value>
	</init-param>
    </filter>
    
   [B] <filter>
 	<filter-name>Chart Filter</filter-name>
	<filter-class>org.apache.struts2.dispatcher.ChartResult</filter-class>
        
    </filter>[/B]
  
  <filter-mapping>
        <filter-name>Chart Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  
  <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
  
    <filter-mapping>
 	 <filter-name>Tiles Filter</filter-name>
         <url-pattern>/*</url-pattern>
         <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

 [B]<filter-mapping>
        <filter-name>Chart Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>[/B]

    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>
  
  <welcome-file-list>
        <welcome-file>/pages/login.jsp</welcome-file>
   </welcome-file-list>
  
  <servlet>
      <servlet-name>tiles</servlet-name>
      <servlet-class>org.apache.tiles.servlet.TilesServlet</servlet-class>
      <init-param>
         <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
         <param-value>/WEB-INF/tiles-defs.xml</param-value>
      </init-param>
     <load-on-startup>2</load-on-startup>
   </servlet>
  
</web-app>

Graph.java

package graph;

import java.util.*;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.StandardXYItemRenderer;
import org.jfree.data.*;

import com.opensymphony.xwork2.ActionSupport;


public class Graph extends ActionSupport {
	
	
	
    private JFreeChart chart;

    public String execute() throws Exception {
            // chart creation logic...
            XYSeries dataSeries = new XYSeries("first"); // pass a key for this serie
            for (int i = 0; i <= 100; i++) {
                    dataSeries.add(i, i+100);
            }
            XYSeriesCollection xyDataset = new XYSeriesCollection(dataSeries);

            ValueAxis xAxis = new NumberAxis("Raw Marks");
            ValueAxis yAxis = new NumberAxis("Moderated Marks");

            // set my chart variable
            chart =
                    new JFreeChart( "Moderation Function", JFreeChart.DEFAULT_TITLE_FONT,
                            new XYPlot( xyDataset, xAxis, yAxis, new StandardXYItemRenderer(StandardXYItemRenderer.LINES)),
                            false);
            chart.setBackgroundPaint(java.awt.Color.white);

            return SUCCESS;
    }

// this method will get called if we specify <param name="value">chart</param>
    public JFreeChart getChart() {
            return chart;
    }

	

}

After logging I am redirecting to display.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Graph display</title>
</head>
<body>
hellooooooooooooooooooo

 <div align="center">  
     <center>  
     <table border = "0" cellpadding = "0" cellspacing = "0" width="400">  
     <tr>  
         <td>  
             <ul>  
                 <li><a href="portal/Graph.action">Login Application </a></li>  
             </ul>  
         </td>  
     </tr>  
     </table>  
     </center>  
</div>  

</body>
</html>

The error I am getting is :
SEVERE: Exception starting filter Chart Filter
java.lang.ClassCastException: org.apache.struts2.dispatcher.ChartResult cannot be cast to javax.servlet.Filter
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4071)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4725)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Aug 10, 2011 10:08:08 AM org.apache.catalina.core.ApplicationContext log
INFO: TilesDecorationFilter:Initializing filter
Aug 10, 2011 10:08:09 AM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Aug 10, 2011 10:08:09 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [/graphFunctionWeb] startup failed due to previous errors
Aug 10, 2011 10:08:09 AM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: The web application [/graphFunctionWeb] created a ThreadLocal with key of type [com.opensymphony.xwork2.ActionContext.ActionContextThreadLocal] (value [com.opensymphony.xwork2.ActionContext$ActionContextThreadLocal@ce16ad]) and a value of type [com.opensymphony.xwork2.ActionContext] (value [com.opensymphony.xwork2.ActionContext@32bd65]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
Aug 10, 2011 10:08:09 AM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: The web application [/graphFunctionWeb] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@130633a]) and a value of type [com.opensymphony.xwork2.inject.InternalContext[]] (value [[Lcom.opensymphony.xwork2.inject.InternalContext;@1c286e2]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
Aug 10, 2011 10:08:10 AM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Aug 10, 2011 10:08:10 AM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Aug 10, 2011 10:08:10 AM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/58 config=null
Aug 10, 2011 10:08:10 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 2670 ms


//////////////////////////////////////////////////////////////////////////////////

But the same code runs when I remove the chart functionality from the xml files. please check and provide some input, will appreciate if u will provide the code snippet.

Some links I checked like, http://struts.apache.org/2.1.6/struts2-plugins/struts2-jfreechart-plugin/apidocs/org/apache/struts2/dispatcher/ChartResult.html
but not much useful.


Regards,
Chandan

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.