You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "George Christman (JIRA)" <ji...@apache.org> on 2013/10/16 15:41:42 UTC
[jira] [Created] (TAP5-2204) Ajax select menu bug
George Christman created TAP5-2204:
--------------------------------------
Summary: Ajax select menu bug
Key: TAP5-2204
URL: https://issues.apache.org/jira/browse/TAP5-2204
Project: Tapestry 5
Issue Type: Bug
Components: tapestry-core
Affects Versions: 5.4
Reporter: George Christman
The SelectModel is now being used on form render AND submission whereas it used to be used only on render of the form. This is a big deal performance-wise because creation of the SelectModel commonly involves a database query to populated a list of
objects.
This appears to be a regression bug starting in 5.4.21.
Nabble post
http://apache-tapestry-mailing-list-archives.1045711.n5.nabble.com/Re-T5-4-ajax-select-menu-bug-td5724142.html
Sample code and stack trace.
Geoff example
http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/selectmore1
or
<html t:type="layout" t:title="Select Demo" xmlns:t="
http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
xmlns:p="tapestry:parameter">
<form t:type="form">
<select t:type="select" t:id="computer" t:model="computerModels"
t:zone="ajaxZone"/>
<t:zone t:id="ajaxZone" id="ajaxZone">
<select t:type="select"t t:id="monitor"
t:model="monitorModels"/>
</t:zone>
</form>
</html>
public class SelectDemo {
@Property
private Computer computer;
@Property
private Monitor monitor;
@Property
private SelectModel computerModels;
@Property
private SelectModel monitorModels;
@Inject
private SelectModelFactory selectModelFactory;
@InjectComponent
private Zone ajaxZone;
@Inject
private Session session;
public void setupRender() {
List<Computer> computers =
session.createCriteria(Computer.class).list();
computerModels = selectModelFactory.create(computers, "name");
monitorModels = selectModelFactory.create(new ArrayList<>());
}
Object onValueChangedFromMonitor(Computer computer) {
List<Monitor> monitors =
session.createCriteria(Monitor.class).add(Restrictions.eq("computer",
computer)).list();
monitorModels = selectModelFactory.create(monitors, "name");
return ajaxZone.getBody();
}
}
The full stack trace
- Application Exception
-
-
Tapestry Version: 5.4-alpha-22
-
-
Application Version: 1.1-SNAPSHOT-DEV
An exception has occurred processing this request.
Parameter 'model' of component SelectDemo:computer is bound to null. This
parameter is not allowed to be null.
org.apache.tapestry5.ioc.internal.OperationException
*Parameter 'model' of component SelectDemo:computer is bound to null. This
parameter is not allowed to be null.*
locationclasspath:org/company/tapdemo/pages/SelectDemo.tml, line 31<html
t:type="layout" t:title="Select Demo" xmlns:t="
http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
xmlns:p="tapestry:parameter">2 <form t:type="form">3 <select
t:type="select" t:id="computer" t:model="computerModels" t:zone="ajaxZone"/>
4
5 <t:zone t:id="ajaxZone" id="ajaxZone">6 <select t:type="select"
t:id="monitor" t:model="monitorModels"/>7 </t:zone>8 </form>trace
- Handling Ajax 'change' component event request for SelectDemo:computer.
- Triggering event 'change' on SelectDemo:computer
org.apache.tapestry5.runtime.ComponentEventException
*Parameter 'model' of component SelectDemo:computer is bound to null. This
parameter is not allowed to be null.*
context
eventTypechangelocationclasspath:org/company/tapdemo/pages/SelectDemo.tml,
line 3
org.apache.tapestry5.ioc.internal.util.TapestryException
*Parameter 'model' of component SelectDemo:computer is bound to null. This
parameter is not allowed to be null.*
locationclasspath:org/company/tapdemo/pages/SelectDemo.tml, line 3
Filter Frames?
Stack trace:
- org.apache.tapestry5.internal.transform.ParameterWorker$3$1.readFromBinding(ParameterWorker.java:275)
- org.apache.tapestry5.internal.transform.ParameterWorker$3$1.get(ParameterWorker.java:381)
- org.apache.tapestry5.corelib.components.Select.findValueInModel(Select.java:273)
- org.apache.tapestry5.corelib.components.Select.toValue(Select.java:262)
- org.apache.tapestry5.corelib.components.Select.onChange(Select.java:238)
- org.apache.tapestry5.corelib.components.Select.dispatchComponentEvent(Select.java)
- org.apache.tapestry5.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:950)
- org.apache.tapestry5.internal.structure.ComponentPageElementImpl.processEventTriggering(ComponentPageElementImpl.java:1127)
- org.apache.tapestry5.internal.structure.ComponentPageElementImpl$5.invoke(ComponentPageElementImpl.java:1072)
- org.apache.tapestry5.internal.structure.ComponentPageElementImpl$5.invoke(ComponentPageElementImpl.java:1069)
- org.apache.tapestry5.internal.structure.ComponentPageElementResourcesImpl.invoke(ComponentPageElementResourcesImpl.java:145)
- org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1068)
- org.apache.tapestry5.internal.services.AjaxComponentEventRequestHandler.handle(AjaxComponentEventRequestHandler.java:109)
- org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateFilter.handle(AjaxFormUpdateFilter.java:56)
- org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
- org.apache.tapestry5.upload.internal.services.UploadExceptionFilter.handle(UploadExceptionFilter.java:75)
- org.apache.tapestry5.modules.TapestryModule$37.handle(TapestryModule.java:2185)
- org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handleComponentEvent(ComponentRequestHandlerTerminator.java:43)
- org.apache.tapestry5.services.InitializeActivePageName.handleComponentEvent(InitializeActivePageName.java:39)
- org.apache.tapestry5.internal.services.RequestOperationTracker$1.perform(RequestOperationTracker.java:55)
- org.apache.tapestry5.internal.services.RequestOperationTracker$1.perform(RequestOperationTracker.java:52)
- org.apache.tapestry5.internal.services.RequestOperationTracker.handleComponentEvent(RequestOperationTracker.java:47)
- org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:46)
- org.apache.tapestry5.modules.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:299)
- org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
- org.apache.tapestry5.modules.TapestryModule$3.service(TapestryModule.java:844)
- org.apache.tapestry5.modules.TapestryModule$2.service(TapestryModule.java:834)
- org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:89)
- org.company.tapdemo.services.AppModule$1.service(AppModule.java:101)
- org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105)
- org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95)
- org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
- org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119)
- org.apache.tapestry5.modules.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:250)
- org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:59)
- org.company.tapdemo.services.impl.AjaxUploadServletRequestFilter.service(AjaxUploadServletRequestFilter.java:31)
- org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44)
- org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
- org.apache.tapestry5.modules.TapestryModule$1.service(TapestryModule.java:794)
- org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:166)
RequestContext Path/TapDemoPath/selectdemo.computer:changeLocaleen_USServer
NamelocalhostFlagsXHRPorts (local/server)8080 / 8080MethodPOSTQuery
Parameterst:formcomponentidSelectDemo:formt:formidformt:selectvalue2t:zoneid
ajaxZoneHeadersAccept*/*Accept-Encodinggzip, deflateAccept-Language
en-US,en;q=0.5Cache-Controlno-cacheConnectionkeep-aliveContent-Length91
Content-Typeapplication/x-www-form-urlencoded; charset=UTF-8Cookie
JSESSIONID=8zhf85bxcr15DNT1Hostlocalhost:8080Pragmano-cache
Proxy-AuthorizationBasic Z21jMDc6RmFsbGluZzIwMTM=Referer
http://localhost:8080/TapDemo/selectdemoUser-AgentMozilla/5.0 (Windows NT
6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0X-Requested-With
XMLHttpRequestAttributespage-nameSelectDemoservletAPI.characterEncodingUTF-8
servletAPI.contentLength91servletAPI.contentTypeapplication/x-www-form-urlencoded;
charset=UTF-8servletAPI.protocolHTTP/1.1servletAPI.schemehttp
tapestry.active-page-loadedtrueContext Attributes
com.sun.jsp.tagFileJarUrlsCache{}com.sun.jsp.taglibraryCache{}
javax.servlet.context.tempdir
C:\Users\gmc07\Documents\NetBeansProjects\TapDemo\target\work
org.apache.tapestry5.application-registry
org.apache.tapestry5.ioc.internal.RegistryWrapper@3fc70554
--
This message was sent by Atlassian JIRA
(v6.1#6144)