Hi All,
I need some help on JFreeChart usage with ADF JSF Faces since I am new to the JFreeChart usage.
I have a requirement to develop a line chart in Jdeveloper 10.1.3 on ADF Faces. In order to do this I referred to the following blog entry:-
http://biemond.blogspot.com/2008/12/cha ... -1013.html
I tried to develop the graph application referring to the example project available on the web page above using the following components:-
chartcreator-1.2.0.jar
jcommon-1.0.14.jar
jfreechart-1.0.11.jar
I have all these jars copied under the WEB-INF\lib folder of my ViewController project.
1) I setup the Chart Creator tld available under the chartcreator-1.2.0 jar file into the JSP Tag Libraries in the Project Properties section of my ViewController project.
2) I imported all the jars listed above into the Libraries section of my ViewController project.
3) Changed the web.xml to include the following components:-
<context-param>
<param-name>net.sf.jsfcomp.chartcreator.USE_CHARTLET</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/WEB-INF/chartcreator.taglib.xml</param-value>
</context-param>
<servlet>
<servlet-name>Chartlet</servlet-name>
<servlet-class>net.sf.jsfcomp.chartcreator.Chartlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Chartlet</servlet-name>
<url-pattern>*.chart</url-pattern>
</servlet-mapping>
4) The faces-config.xml has the following :-
<managed-bean>
<managed-bean-name>backing_graphtest</managed-bean-name>
<managed-bean-class>view.backing.Graphtest</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>bindings</property-name>
<value>#{bindings}</value>
</managed-property>
<!--oracle-jdev-comment:managed-bean-jsp-link:1graphtest.jspx-->
</managed-bean>
<lifecycle>
<!--
<phase-listener>oracle.adf.controller.faces.lifecycle.ADFPhaseListener</phase-listener>
-->
* <phase-listener>test.model.DynamicJDBCADFPhaseListener</phase-listener>*
</lifecycle>
<application>
<default-render-kit-id>oracle.adf.core</default-render-kit-id>
</application>
5) The JSF page used to display the graph was changed to have the following components:-
<jsp:root xmlns:jsp="
http://java.sun.com/JSP/Page" version="2.0"
xmlns:h="
http://java.sun.com/jsf/html"
xmlns:f="
http://java.sun.com/jsf/core"
xmlns:af="
http://xmlns.oracle.com/adf/faces"
xmlns:afh="
http://xmlns.oracle.com/adf/faces/html"
xmlns:cust="
http://xmlns.oracle.com/adf/faces/customizable"
xmlns:ch="http://sourceforge.net/projects/jsf-comp">
...
...
<ch:chart id="chartLine" datasource="#{backing_Graphtest.dataset}"
type="line" is3d="true" antialias="true" title="Line"
xlabel="Date" ylabel="Level" height="300" width="500"/>
...
...
6) Lastly the backing bean had the following code to generate the datasource for the line graph above:-
public DefaultCategoryDataset getDataset() throws ParseException,
* SQLException {*
System.out.println("Am into getDataset() function");
XYSeries series = new XYSeries("Installation Vessel Level Graph");
TimeSeries s1 = new TimeSeries("Year", Year.class);
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
DCBindingContainer bc = getBindings();
if (bc != null) {
System.out.println("\n\n Am into getDataset() function --> bc not null");
DCIteratorBinding normIter =
bc.findIteratorBinding("ViewObj1Iterator");
RowSetIterator rsi = normIter.getRowSetIterator();
String[] attNames = rsi.getRowAtRangeIndex(0).getAttributeNames();
int readDateTimeNum = 0;
int levelNum = 0;
for (int j = 0; j < attNames.length; j++) {
if (attNames[j].equalsIgnoreCase("ReadingDatetime")) {
readDateTimeNum = j;
} else if (attNames[j].equalsIgnoreCase("PostFillLevel")) {
levelNum = j;
}
}
for (int i = 0; i < rsi.getRowCount(); i++) {
Row currentRow = rsi.getRowAtRangeIndex(i);
Object[] attValues = currentRow.getAttributeValues();
String readingDateStr = attValuesreadDateTimeNum.toString();
SimpleDateFormat format = new SimpleDateFormat("ddMMyy");
java.util.Date readingValue = format.parse(readingDateStr);
//Integer readingDate = Integer.parseInt(readingValue.toString());
Number levelValue = (Number)attValueslevelNum;
dataset.addValue(levelValue,
"Date", readingValue.toString());
}
}
return dataset;
}
7) Now when I try to run the JSF page, I get the following error in the projectname-oc4j-app.log file:-
09/03/05 16:23:48.771 TenorJavaGraph: 10.1.3.1.1 Started
09/03/05 16:23:57.115 TenorJavaGraph: Servlet error
java.lang.RuntimeException: Unsupported chart type
* at net.sf.jsfcomp.chartcreator.utils.ChartUtils.createChartWithType(Unknown Source)*
at net.sf.jsfcomp.chartcreator.Chartlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:712)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:369)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:258)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:50)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:192)
at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:197)
at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:346)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:152)
at oracle.adfinternal.view.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:157)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:137)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:214)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:712)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:369)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:865)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:447)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:215)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.run(HttpRequestHandler.java:117)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.run(HttpRequestHandler.java:110)
at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
at java.lang.Thread.run(Thread.java:595)
09/03/05 16:25:05.584 TenorJavaGraph: Servlet error
java.lang.RuntimeException: Unsupported chart type
* at net.sf.jsfcomp.chartcreator.utils.ChartUtils.createChartWithType(Unknown Source)*
at net.sf.jsfcomp.chartcreator.Chartlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:712)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:369)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:258)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:50)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:192)
at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:197)
at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:346)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:152)
at oracle.adfinternal.view.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:157)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:137)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:214)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:712)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:369)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:865)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:447)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:215)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.run(HttpRequestHandler.java:117)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).server.http.HttpRequestHandler.run(HttpRequestHandler.java:110)
at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:239)
at oracle.oc4j.network.ServerSocketAcceptHandler.access$700(ServerSocketAcceptHandler.java:34)
at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:880)
at com.evermindhttp://Oracle Containers for J2EE 10g (10.1.3.1.1).util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
at java.lang.Thread.run(Thread.java:595)
I was not able to find out why the "Unsupported Chart Type" error is coming up here. I tried this with pie, xyline, etc. However I still keep receiving this error. Please could some one help me out? I have been struggling with this for some time now. Tbe graph does not display and there are no errors in the JSF page/application server. A broken link appears in place of the graph.
Thanks a lot in advance and sorry for the gigantic mail...
Regards,
Lester.
NOTE: Some people have mentioned that they were able to see the graph when they changed the servlet mapping sequence, deleting title, etc. I have tried these but am not able to see the graph.