You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Ben Segall (JIRA)" <de...@tapestry.apache.org> on 2008/07/26 18:54:31 UTC

[jira] Updated: (TAPESTRY-2430) Context lost in a form fragment in a property editor component

     [ https://issues.apache.org/jira/browse/TAPESTRY-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ben Segall updated TAPESTRY-2430:
---------------------------------

    Attachment: tapestry-form-fragment.patch

This patch fixes the issue for me. It makes the FormFragment execute the stored actions itself at the right time, rather than having Form do it. Someone who knows where the factored out code should go should probably move the part of runActions that I copied straight from Form.

> Context lost in a form fragment in a property editor component
> --------------------------------------------------------------
>
>                 Key: TAPESTRY-2430
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-2430
>             Project: Tapestry
>          Issue Type: Bug
>          Components: Core Components
>    Affects Versions: 5.0.12
>            Reporter: José Paumard
>         Attachments: tapestry-form-fragment.patch
>
>
> I created a PropertyEditor to edit a special class, which content spans over one or more pair of String. 
> The TML for the PropertyEditor declaration is : 
> <t:block t:id="myProp">
> 		<t:editor.myPropEditor t:id="myPropEditor" 
> 		                           propertyvalue="prop:context.propertyValue"
> 		                           propertyname="prop:context.label"
> 		                           messages="prop:context.containerMessages"/>
> </t:block>
> The TML of the property editor itself is : 
> <t:label for="s11"/> <t:textfield t:id="s12"/> <br/>
> <t:label for="s21"/> : <t:textfield t:id="s22" /> <br/>
> <t:checkbox t:id="showFragment1" t:mixins="triggerfragment" fragment="fragment1"/>
> <t:formfragment t:id="fragment1" visible="showFragment1">
>    <t:label for="t11"/> <t:textfield t:id="t12"/> <br/>
>    <t:label for="t21"/> : <t:textfield t:id="t22" /> <br/>
> </t:formfragment>
> With a basic POJO class associated to that, and the declaration of the parameters : 
> public class MyPropertyEditor {
> 	@Parameter(name="propertyValue",required=true)
> 	private MyProperty myProperty ;
> 	
> 	@Parameter(name="propertyName",required=true)
> 	private String propertyName ;
> 	
> 	@Parameter(name="messages",required=true)
> 	private Messages messages ;
> 	private String s11, s12, s21, s22, t11, t12, t21, t22 ;
> ... 
> }
> If I try to read / update the myPropery parameter in that class : 
> - from the s11, s12, s21, s22 getter or setter -> everything works ok, I can read or update this parameter
> - from the t11, t12, t21 or t22 getter or setter, I get the following stack trace : 
> An unexpected application exception has occurred.
>     * org.apache.tapestry5.runtime.ComponentEventException
>       Failure writing parameter 'value' of component AppPropertyEditBlocks:mypropertyeditor.content2: Failure reading parameter 'propertyValue' of component AppPropertyEditBlocks:mypropertyeditor: No object of type org.apache.tapestry5.services.PropertyEditContext is available from the Environment. Available types are org.apache.tapestry5.ValidationTracker, org.apache.tapestry5.services.ComponentEventResultProcessor, org.apache.tapestry5.services.FormSupport, org.apache.tapestry5.services.Heartbeat.
>       context
>       eventType
>           action
>       location
>           classpath:org/.../webapp/components/item/AbstractCreate.tml, line 6, column 24
>           1	<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
>           2	
>           3	${message:title}
>           4	<br/>
>           5	
>           6	<t:form t:id="create">
>           7	<t:errors/>
>           8	<t:beaneditor t:id="createEditor" object="item" exclude="prop:excludelist"/>
>           9	<t:submit value="message:create"/>
>           10	</t:form>
>           11	
>     * org.apache.tapestry5.ioc.internal.util.TapestryException
>       Failure writing parameter 'value' of component AppPropertyEditBlocks:mypropertyeditor.content2: Failure reading parameter 'propertyValue' of component AppPropertyEditBlocks:mypropertyeditor: No object of type org.apache.tapestry5.services.PropertyEditContext is available from the Environment. Available types are org.apache.tapestry5.ValidationTracker, org.apache.tapestry5.services.ComponentEventResultProcessor, org.apache.tapestry5.services.FormSupport, org.apache.tapestry5.services.Heartbeat.
>       location
>           classpath:org/.../webapp/components/editor/MyPropertyEditor.tml, line 21, column 62
>           16	<t:checkbox t:id="showFragment1" t:mixins="triggerfragment" fragment="fragment1"/>
>           17	<t:label for="showFragment1"/>
>           18	
>           19	<t:formfragment t:id="fragment1" visible="showFragment1">
>           20	<t:label for="t11"/> : <t:textfield t:id="t12"/>
>           21	<t:label for="t21"/> : <t:textfield t:id="t33" />
>           22	</t:formfragment>
>           23	
>           24	
>           25	</td></tr>
>           26	</table>
>     * org.apache.tapestry5.ioc.internal.util.TapestryException
>       Failure reading parameter 'propertyValue' of component AppPropertyEditBlocks:mypropertyeditor: No object of type org.apache.tapestry5.services.PropertyEditContext is available from the Environment. Available types are org.apache.tapestry5.ValidationTracker, org.apache.tapestry5.services.ComponentEventResultProcessor, org.apache.tapestry5.services.FormSupport, org.apache.tapestry5.services.Heartbeat.
>       location
>           classpath:org/.../webapp/pages/AppPropertyEditBlocks.tml, line 7, column 73
>           2	
>           3	<t:block t:id="myproperty">
>           4	<t:editor.mypropertyeditor t:id="myPropertyEditor"
>           5	propertyvalue="prop:context.propertyValue"
>           6	propertyname="prop:context.label"
>           7	messages="prop:context.containerMessages"/>
>           8	</t:block>
>           9	
>     * java.lang.RuntimeException
>       No object of type org.apache.tapestry5.services.PropertyEditContext is available from the Environment. Available types are org.apache.tapestry5.ValidationTracker, org.apache.tapestry5.services.ComponentEventResultProcessor, org.apache.tapestry5.services.FormSupport, org.apache.tapestry5.services.Heartbeat.
>       Stack trace
>               o org.apache.tapestry5.internal.services.EnvironmentImpl.peekRequired(EnvironmentImpl.java:73)
>               o org.limc.webapp.pages.AppPropertyEditBlocks._$environment_read_context(AppPropertyEditBlocks.java)
>               o org.limc.webapp.pages.AppPropertyEditBlocks.getContext(AppPropertyEditBlocks.java:97)
>               o org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:53)
>               o org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.readParameter(InternalComponentResourcesImpl.java:237)
>               o org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.readParameter(InternalComponentResourcesImpl.java:252)
>               o org.limc.webapp.components.editor.MyPropertyEditor._$read_parameter_propertyValue(MyPropertyEditor.java)
>               o org.limc.webapp.components.editor.MyPropertyEditor.addTextPair(MyPropertyEditor.java:111)
>               o org.limc.webapp.components.editor.MyPropertyEditor.setContent2(MyPropertyEditor.java:220)
>               o org.apache.tapestry5.internal.bindings.PropBinding.set(PropBinding.java:66)
>               o org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.writeParameter(InternalComponentResourcesImpl.java:273)
>               o org.apache.tapestry5.corelib.base.AbstractTextField._$update_parameter_value(AbstractTextField.java)
>               o org.apache.tapestry5.corelib.base.AbstractTextField.processSubmission(AbstractTextField.java:211)
>               o org.apache.tapestry5.corelib.base.AbstractField.processSubmission(AbstractField.java:196)
>               o org.apache.tapestry5.corelib.base.AbstractField.access$100(AbstractField.java:33)
>               o org.apache.tapestry5.corelib.base.AbstractField$ProcessSubmission.execute(AbstractField.java:103)
>               o org.apache.tapestry5.corelib.base.AbstractField$ProcessSubmission.execute(AbstractField.java:97)
>               o org.apache.tapestry5.corelib.components.Form.executeStoredActions(Form.java:396)
>               o org.apache.tapestry5.corelib.components.Form._$advised$onAction(Form.java:315)
>               o org.apache.tapestry5.corelib.components.Form$onAction$invocation_11a730bb10b.invokeAdvisedMethod(Form$onAction$invocation_11a730bb10b.java)
>               o org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:71)
>               o org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvice.java:37)
>               o org.apache.tapestry5.internal.transform.LogWorker$1.advise(LogWorker.java:54)
>               o org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:80)
>               o org.apache.tapestry5.corelib.components.Form.onAction(Form.java)
>               o org.apache.tapestry5.corelib.components.Form.dispatchComponentEvent(Form.java)
>               o org.apache.tapestry5.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:872)
>               o org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1025)
>               o org.apache.tapestry5.internal.services.ComponentEventRequestHandlerImpl.handle(ComponentEventRequestHandlerImpl.java:67)
>               o org.apache.tapestry5.internal.services.ImmediateActionRenderResponseFilter.handle(ImmediateActionRenderResponseFilter.java:42)
>               o org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
>               o org.apache.tapestry5.services.TapestryModule$37.handle(TapestryModule.java:1987)
>               o org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:135)
>               o org.apache.tapestry5.services.TapestryModule$12.service(TapestryModule.java:938)
>               o org.limc.webapp.services.AppModule$3.service(AppModule.java:148)
>               o org.limc.webapp.services.AppModule$1.service(AppModule.java:45)
>               o org.apache.tapestry5.internal.services.LocalizationFilter.service(LocalizationFilter.java:42)
>               o org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:586)
>               o org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
>               o org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
>               o org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:93)
>               o org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:84)
>               o org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:75)
>               o org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106)
>               o org.apache.tapestry5.services.TapestryModule$11.service(TapestryModule.java:918)
>               o org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44)
>               o org.limc.webapp.services.AppModule$2.service(AppModule.java:58)
>               o org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
>               o org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:168)
>               o org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)
>               o org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)
>               o org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
>               o org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
>               o org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633)
>               o org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
>               o org.mortbay.http.HttpServer.service(HttpServer.java:909)
>               o org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
>               o org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
>               o org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
>               o org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
>               o org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
>               o org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org