Exception when entering find mode on onRecordSelection

Hello,

I’m using the latest version of the old framework, and I’m getting this exception when trying to enter find mode on the onRecordSelection of a form:

2012-09-04 10:26:51,722 ERROR [http-8080-1] com.servoy.j2db.util.Debug -  [2A535EFE-A76F-41D9-9A5F-5C864BB3C36E HR]
2012-09-04 10:26:51,722 ERROR [http-8080-1] com.servoy.j2db.util.Debug - Throwable [2A535EFE-A76F-41D9-9A5F-5C864BB3C36E HR]
org.mozilla.javascript.WrappedException: Wrapped java.lang.NullPointerException (C:\servoy_workspace_hr_6.0.6\HR_ditta\forms\inail_datigenerali_tab.js#65)
	at org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1828)
	at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:199)
	at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:367)
	at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:3666)
	at script.filterData(C:\servoy_workspace_hr_6.0.6\HR_ditta\forms\inail_datigenerali_tab.js:65)
	at script.onRecordSelection(C:\servoy_workspace_hr_6.0.6\HR_shared\forms\storico_base.js:194)
	at script.onRecordSelection(C:\servoy_workspace_hr_6.0.6\HR_ditta\forms\inail_datigenerali_tab.js:24)
	at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2680)
	at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:166)
	at com.servoy.j2db.scripting.ScriptEngine.executeFunction(ScriptEngine.java:537)
	at com.servoy.j2db.debug.RemoteDebugScriptEngine.executeFunction(RemoteDebugScriptEngine.java:392)
	at com.servoy.j2db.FormController.executeFunction(FormController.java:4072)
	at com.servoy.j2db.FormController.executeFormMethod(FormController.java:4394)
	at com.servoy.j2db.FormController.executeOnRecordSelect(FormController.java:4332)
	at com.servoy.j2db.FormController.refreshAllPartRenderers(FormController.java:2239)
	at com.servoy.j2db.FormController.valueChanged(FormController.java:2311)
	at com.servoy.j2db.FormController.notifyVisible(FormController.java:3086)
	at com.servoy.j2db.server.headlessclient.dataui.WebTabPanel.notifyVisible(WebTabPanel.java:634)
	at com.servoy.j2db.dataprocessing.DataAdapterList.notifyVisible(DataAdapterList.java:514)
	at com.servoy.j2db.server.headlessclient.dataui.WebDataRenderer.notifyVisible(WebDataRenderer.java:297)
	at com.servoy.j2db.FormController.notifyVisible(FormController.java:3155)
	at com.servoy.j2db.server.headlessclient.dataui.WebTabFormLookup.notifyVisible(WebTabFormLookup.java:179)
	at com.servoy.j2db.server.headlessclient.dataui.WebTabPanel.setCurrentForm(WebTabPanel.java:472)
	at com.servoy.j2db.server.headlessclient.dataui.WebTabPanel.notifyVisible(WebTabPanel.java:607)
	at com.servoy.j2db.dataprocessing.DataAdapterList.notifyVisible(DataAdapterList.java:514)
	at com.servoy.j2db.server.headlessclient.dataui.WebDataRenderer.notifyVisible(WebDataRenderer.java:297)
	at com.servoy.j2db.FormController.notifyVisible(FormController.java:3155)
	at com.servoy.j2db.server.headlessclient.dataui.WebSplitPane.notifyVisibleForm(WebSplitPane.java:402)
	at com.servoy.j2db.server.headlessclient.dataui.WebSplitPane.notifyVisible(WebSplitPane.java:367)
	at com.servoy.j2db.dataprocessing.DataAdapterList.notifyVisible(DataAdapterList.java:514)
	at com.servoy.j2db.server.headlessclient.dataui.WebDataRenderer.notifyVisible(WebDataRenderer.java:297)
	at com.servoy.j2db.FormController.notifyVisible(FormController.java:3155)
	at com.servoy.j2db.server.headlessclient.dataui.WebSplitPane.notifyVisibleForm(WebSplitPane.java:402)
	at com.servoy.j2db.server.headlessclient.dataui.WebSplitPane.setForm(WebSplitPane.java:933)
	at com.servoy.j2db.ui.scripting.RuntimeSplitPane.js_setRightForm(RuntimeSplitPane.java:93)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:179)
	at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:367)
	at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:3666)
	at script.svy_nav_showForm(C:\servoy_workspace_hr_6.0.6\svy_nav_navigation\globals.js:1993)
	at script.svy_nav_tree_node_selected(C:\servoy_workspace_hr_6.0.6\svy_nav_navigation\globals.js:2224)
	at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2680)
	at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:166)
	at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:387)
	at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3134)
	at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:165)
	at com.servoy.j2db.scripting.ScriptEngine.executeFunction(ScriptEngine.java:537)
	at com.servoy.j2db.debug.RemoteDebugScriptEngine.executeFunction(RemoteDebugScriptEngine.java:392)
	at com.servoy.j2db.plugins.ClientPluginAccessProvider$MethodExecutor.run(ClientPluginAccessProvider.java:514)
	at com.servoy.j2db.server.headlessclient.WebClient.invokeAndWait(WebClient.java:555)
	at com.servoy.j2db.plugins.ClientPluginAccessProvider.executeMethod(ClientPluginAccessProvider.java:413)
	at com.servoy.j2db.server.headlessclient.WebClientPluginAccessProvider.executeMethod(WebClientPluginAccessProvider.java:99)
	at com.servoy.j2db.scripting.FunctionDefinition.exec(FunctionDefinition.java:218)
	at com.servoy.j2db.scripting.FunctionDefinition.execute(FunctionDefinition.java:182)
	at com.servoy.extensions.beans.dbtreeview.MouseAction.execute(MouseAction.java:71)
	at com.servoy.extensions.beans.dbtreeview.MouseEventBehavior.onEvent(MouseEventBehavior.java:49)
	at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:177)
	at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:312)
	at org.apache.wicket.request.target.component.listener.BehaviorRequestTarget.processEvents(BehaviorRequestTarget.java:157)
	at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
	at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1279)
	at org.apache.wicket.RequestCycle.step(RequestCycle.java:1358)
	at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1465)
	at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
	at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
	at com.servoy.j2db.server.servlets.Zl.doGet(Zl.java:8)
	at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:554)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at com.servoy.j2db.server.headlessclient.dataui.WebTabPanel.showFoundSet(WebTabPanel.java:704)
	at com.servoy.j2db.server.headlessclient.dataui.WebTabPanel.valueChanged(WebTabPanel.java:1343)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at com.servoy.j2db.util.model.AlwaysRowSelectedSelectionModel.fireValueChanged(AlwaysRowSelectedSelectionModel.java:236)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.removeIndexInterval(Unknown Source)
	at com.servoy.j2db.util.model.AlwaysRowSelectedSelectionModel.removeIndexInterval(AlwaysRowSelectedSelectionModel.java:134)
	at com.servoy.j2db.util.model.AlwaysRowSelectedSelectionModel.intervalRemoved(AlwaysRowSelectedSelectionModel.java:284)
	at com.servoy.j2db.dataprocessing.TableAndListEventDelegate.fireIntervalRemoved(TableAndListEventDelegate.java:135)
	at com.servoy.j2db.dataprocessing.TableAndListEventDelegate$1.run(TableAndListEventDelegate.java:158)
	at com.servoy.j2db.dataprocessing.TableAndListEventDelegate.fireTableAndListEvent(TableAndListEventDelegate.java:180)
	at com.servoy.j2db.dataprocessing.SwingRelatedFoundSet.fireFoundSetEvent(SwingRelatedFoundSet.java:150)
	at com.servoy.j2db.dataprocessing.FoundSet.fireDifference(FoundSet.java:3938)
	at com.servoy.j2db.dataprocessing.FoundSet.setFindMode(FoundSet.java:3838)
	at com.servoy.j2db.dataprocessing.FoundSet.js_find(FoundSet.java:732)
	at sun.reflect.GeneratedMethodAccessor287.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:179)
	... 78 more

What’s weird is that if I just execute the find within the developer’s console everything goes just fine…

EDIT: this only happens in webclient
EDIT2: the problem seems to be related to the fact that I directly use the related foundset to perform the find, so that some update event is triggered or something…unfortunately I can’t duplicate or apply foundset filters, since related foundsets cannot be changed in any way apart from searching them…

It looks like this is related to this change in 6.1:

Form.onRecordSelection is also fired when the selection is being set to none (-1) if an empty foundset is set. (so foundset.getSelectedRecord() can return null)

See the 6.1 changes list: http://wiki.servoy.com/display/public/DOCS/New+in+this+release

You should check in your onRecordSelection method if there is really a record, because that is not always the case anymore.

I don’t know but I’ll give it a try. However the null reference seems to be the form used by some internal method of Servoy.

What exactly is your code around line 65 of inail_datigenerali_tab.js?

This is the function generating the error

function filterData()
{
	var fs = ditteinailgenerale_to_ditteinailposizioni;
	if(fs && fs.find())
	{
		// La data di decorrenza deve essere anteriore alla data odierna
		fs.datacessazattivita = '^||>=' + globals.formatForFind(globals._TODAY);		
		fs.search();
	}
}

The error is raised by the if clause