Hi,
I’m testing DHTMLX if it’s suitable to my new project but in the mean time I have lots of problems with proper working of dhtmlxConnector for java version 15_120612. As JDBC back-end I use JayBird 2.2.3 driver.
There is simle JSP page with tree and grid inside:
<%@ 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">
<link rel="STYLESHEET" type="text/css" href="codebase/dhtmlx.css">
<script src="codebase/dhtmlx.js"></script>
<title>DHTMLX Test</title>
</head>
<body OnLoad="doInit()">
<h1>Tree 1</h1>
<div id="mytreeid" style="width:250px; height:218px;background-color:#f5f5f5;border :1px solid Silver;"></div><br>
<h1>Grid 1</h1>
<div id="mygridid" style="width: 600px; height: 150px;"></div>
<button onclick="addRow()">Add Row</button>
<button onclick="removeRow()">Remove Row</button>
<script>
var mygrid = null;
var mytree = null;
function doInit(){
doInitTree();
doInitGrid();
}
function doInitTree() {
//tworzenie drzewa
mytree = new dhtmlXTreeObject('mytreeid',"100%","100%",0);
mytree.setSkin('dhx_skyblue');
mytree.setImagePath("common/images/");
//mytree.setImagePath("codebase/imgs/");
mytree.enableDragAndDrop(0);
mytree.enableTreeLines(false);
mytree.setImageArrays("plus","","","","plus.gif");
mytree.setImageArrays("minus","","","","minus.gif");
mytree.setStdImages("book.gif","books_open.gif","books_close.gif");
//mytree.setXMLAutoLoading("BasicTreeConnector");
//mytree.loadXML("mytree.xml");
mytree.loadXML("BasicTreeConnector");
}
function doInitGrid() {
// creates a grid instance
mygrid = new dhtmlXGridObject('mygridid');
if (mygrid != null) {
// sets the path to the grid images
mygrid.setImagePath("codebase/imgs/");
// sets the headers of the columns
mygrid.setHeader("Model,Qty,Price");
// sets the width of the columns; * - the column fills all the available space
mygrid.setInitWidths("*,150,150");
// sets the horizontal alignment of the value in the columns
mygrid.setColAlign("left,right,right");
// sets the skin of the grid
mygrid.setSkin("light");
// sets the sorting criteria of the columns
mygrid.setColSorting("str,int,na");
// sets the types of the columns
mygrid.setColTypes("ed,ed,ed");
//mygrid.setColTypes("tree,...");
// initializes the grid
mygrid.init();
// populates the grid with the data in XML format
mygrid.loadXML("BasicGridConnector");
// attaches the event handler that will call when a user clicks on the row
mygrid.attachEvent("onRowSelect", doOnRowSelected);
var myDP = new dataProcessor("BasicGridConnector");
myDP.init(mygrid);
}
}
// adds a new row to the grid
function addRow() {
var newId = (new Date()).valueOf();
mygrid.addRow(newId, "", mygrid.getRowsNum());
mygrid.selectRow(mygrid.getRowIndex(newId), false, false, true);
}
// remove the selected row from the grid
function removeRow() {
var selId = mygrid.getSelectedId();
mygrid.deleteRow(selId);
}
// shows the message when a user clicks the row
function doOnRowSelected(rowID, celInd) {
//alert("Selected row ID is "+rowID+"\nUser clicked cell with index "+celInd);
}
</script>
</body>
</html>
And two servlest to interact with these elements
one for tree:
package macma.technicon.com.pl;
import com.dhtmlx.connector.ConnectorServlet;
import com.dhtmlx.connector.TreeConnector;
import javax.servlet.annotation.WebServlet;
import java.sql.Connection;
import java.sql.DriverManager;
/**
* Servlet implementation class BasicTreeConnector
*/
@WebServlet("/BasicTreeConnector")
public class BasicTreeConnector extends ConnectorServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public BasicTreeConnector() {
}
@Override
protected void configure() {
//obtain DB connection
Connection conn=null;
try {
Class.forName ("org.firebirdsql.jdbc.FBDriver");
conn = DriverManager.getConnection("jdbc:firebirdsql://localhost:3050/DRZEWO", "SYSDBA", "masterkey");
} catch (Throwable e) {
e.printStackTrace();
}
//Initialize connector
TreeConnector c = new TreeConnector(conn);
//configure used table and fields
c.render_table("OBJECTSX", "ID", "NAME","","PARENT");
//c.enable_log("e:\\Eclipse\\workspace\\DHTMLX\\connecnion.log", true);
}
}
and one for grid
package macma.technicon.com.pl;
import java.sql.Connection;
import java.sql.DriverManager;
import com.dhtmlx.connector.*;
import javax.servlet.Servlet;
import javax.servlet.annotation.WebServlet;
/**
* Servlet implementation class BasicGridConnector
*/
@WebServlet("/BasicGridConnector")
public class BasicGridConnector extends ConnectorServlet implements Servlet {
private static final long serialVersionUID = 1L;
/**
* @see ConnectorServlet#ConnectorServlet()
*/
public BasicGridConnector() {
super();
}
@Override
protected void configure() {
//obtain DB connection
Connection conn=null;
try {
Class.forName ("org.firebirdsql.jdbc.FBDriver");
conn = DriverManager.getConnection("jdbc:firebirdsql://localhost:3050/DRZEWO", "SYSDBA", "masterkey");
} catch (Throwable e) {
e.printStackTrace();
}
//Initialize connector
GridConnector c = new GridConnector(conn);
//configure used table and fields
c.render_table("OBJECTS", "ID", "NAME,PARENT,ORDER_INDEX");
//c.enable_log("e:\\Eclipse\\workspace\\DHTMLX\\connecnion.log", true);
}
}
For now I have tree problems:
- When I load both tree and grid on FireFox I get error messege “Error type: LoadXML” becasue of exception on server side:
SEVERE: Servlet.service() for servlet [macma.technicon.com.pl.BasicTreeConnector] in context with path [/DHTMLX] threw exception
java.lang.NullPointerException
at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:215)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
at org.apache.coyote.http11.InternalOutputBuffer.endRequest(InternalOutputBuffer.java:159)
at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:749)
at org.apache.coyote.Response.action(Response.java:173)
at org.apache.coyote.Response.finish(Response.java:279)
at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:313)
at org.apache.catalina.connector.CoyoteWriter.close(CoyoteWriter.java:112)
at com.dhtmlx.connector.ConnectorOutputWriter.output(ConnectorOutputWriter.java:59)
at com.dhtmlx.connector.BaseConnector.output_as_xml(BaseConnector.java:563)
at com.dhtmlx.connector.BaseConnector.output_as_xml(BaseConnector.java:587)
at com.dhtmlx.connector.BaseConnector.render(BaseConnector.java:427)
at com.dhtmlx.connector.BaseConnector.render_table(BaseConnector.java:242)
at macma.technicon.com.pl.BasicTreeConnector.configure(BasicTreeConnector.java:37)
at com.dhtmlx.connector.ConnectorServlet.doGet(ConnectorServlet.java:29)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
In Chrome I sometimes get this exception but very very seldom. When I comment out initialization of doInitTree(); or doInitGrid(); it’s works.
- When I have very simple tree in table like this
ID,PARENT,NAME,C_OPIS,CCOUNT
1,0,"Subtree",,0
2,1,"Subtree1",,0
3,2,"Subtree2",,0
It’s working, but when Item have more then one child like this:
ID,PARENT,NAME,C_OPIS,CCOUNT
1,0,"Subtree",,0
2,1,"Subtree1",,0
3,2,"Subtree2",,0
4,1,"Second",,0
the exception on server side occurs:
com.dhtmlx.connector.ConnectorOperationException: The resultSet is closed
at com.dhtmlx.connector.ConnectorResultSet.get_next(ConnectorResultSet.java:75)
at com.dhtmlx.connector.TreeRenderStrategy.render_set(TreeRenderStrategy.java:22)
at com.dhtmlx.connector.TreeRenderStrategy.render_set(TreeRenderStrategy.java:37)
at com.dhtmlx.connector.BaseConnector.render_set(BaseConnector.java:554)
at com.dhtmlx.connector.BaseConnector.output_as_xml(BaseConnector.java:582)
at com.dhtmlx.connector.BaseConnector.render(BaseConnector.java:427)
at com.dhtmlx.connector.BaseConnector.render_table(BaseConnector.java:242)
at macma.technicon.com.pl.BasicTreeConnector.configure(BasicTreeConnector.java:37)
at com.dhtmlx.connector.ConnectorServlet.doGet(ConnectorServlet.java:29)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
- “dataProcessor” do not working when i update some field I get error message “Error type: LoadXML Description: Incorrect XML”
Any help appreciated.
Best Regards,
macma