You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org> on 2009/03/03 23:38:56 UTC

[jira] Commented: (TAP5-5) Context lost in a form fragment in a property editor component

    [ https://issues.apache.org/jira/browse/TAP5-5?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12678494#action_12678494 ] 

Howard M. Lewis Ship commented on TAP5-5:
-----------------------------------------

I think the proper solution would be to have a non-visual component that could be placed inside the FormFragment whose job is to re-synchronize the PropertyEditor at submission time.

> Context lost in a form fragment in a property editor component
> --------------------------------------------------------------
>
>                 Key: TAP5-5
>                 URL: https://issues.apache.org/jira/browse/TAP5-5
>             Project: Tapestry 5
>          Issue Type: Bug
>    Affects Versions: 5.0.15
>            Reporter: José Paumard
>            Assignee: Howard M. Lewis Ship
>         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.