Please, Can you provide your Tapestry Module class that contributes your worker ?
2010/9/9 Markus Feindler <markus.feind...@gmx.de> > No, I get the exception for all pages, also the ExpcetionReportPage for > example. > > > > > -------- Original-Nachricht -------- > > Datum: Thu, 9 Sep 2010 08:26:05 +0200 > > Von: Christophe Cordenier <christophe.corden...@gmail.com> > > An: Tapestry users <users@tapestry.apache.org> > > Betreff: Re: Retrieve ActivationRequestParameters in custom > > PageResponseRenderer > > > > Weird, does you Index page extends a base class ? > > > > 2010/9/8 Markus Feindler <markus.feind...@gmx.de> > > > > > Sorry to bother you, but Im stuck with a DuplicateMemberException: > > > Caused by: java.lang.RuntimeException: > > > javassist.bytecode.DuplicateMemberException: duplicate method: > > > extractRequestParameters in de.wiv.tapestryportlet2.pages.Index > > > at > > > > > > org.apache.tapestry5.internal.services.InternalClassTransformationImpl.addOverrideOfSuperclassMethod(InternalClassTransformationImpl.java:1458) > > > at > > > > > > org.apache.tapestry5.internal.services.InternalClassTransformationImpl.findOrOverrideMethod(InternalClassTransformationImpl.java:1412) > > > at > > > > > > org.apache.tapestry5.internal.services.InternalClassTransformationImpl.findOverrideOrCreateMethod(InternalClassTransformationImpl.java:1397) > > > at > > > > > > org.apache.tapestry5.internal.services.InternalClassTransformationImpl.getOrCreateMethod(InternalClassTransformationImpl.java:1392) > > > at > > > > > > org.apache.tapestry5.portlet.services.PortletRequestParameterWorker.transform(PortletRequestParameterWorker.java:48) > > > at > > > > > > $ComponentClassTransformWorker_12af2cfc4c4.transform($ComponentClassTransformWorker_12af2cfc4c4.java) > > > at > > > > > > $ComponentClassTransformWorker_12af2cfc4c5.transform($ComponentClassTransformWorker_12af2cfc4c5.java) > > > at > > > > > > $ComponentClassTransformWorker_12af2cfc4b6.transform($ComponentClassTransformWorker_12af2cfc4b6.java) > > > at > > > > > > org.apache.tapestry5.internal.services.ComponentClassTransformerImpl$1.run(ComponentClassTransformerImpl.java:194) > > > ... 250 more > > > Caused by: javassist.bytecode.DuplicateMemberException: duplicate > > method: > > > extractRequestParameters in de.wiv.tapestryportlet2.pages.Index > > > at > > javassist.bytecode.ClassFile.testExistingMethod(ClassFile.java:637) > > > at javassist.bytecode.ClassFile.addMethod(ClassFile.java:613) > > > at javassist.CtClassType.addMethod(CtClassType.java:1320) > > > at > > > > > > org.apache.tapestry5.internal.services.InternalClassTransformationImpl.addOverrideOfSuperclassMethod(InternalClassTransformationImpl.java:1444) > > > ... 258 more > > > > > > This is my worker: > > > > > > public class PortletRequestParameterWorker implements > > > ComponentClassTransformWorker { > > > > > > private final ValueEncoderSource valueEncoderSource; > > > private final ComponentClassCache classCache; > > > private final RequestParameterContext requestParameterContext; > > > private final ComponentSource componentSource; > > > > > > public PortletRequestParameterWorker(ValueEncoderSource > > > valueEncoderSource, > > > ComponentClassCache classCache, RequestParameterContext > > > requestParameterContext, > > > ComponentSource componentSource) { > > > this.valueEncoderSource = valueEncoderSource; > > > this.classCache = classCache; > > > this.requestParameterContext = requestParameterContext; > > > this.componentSource = componentSource; > > > } > > > > > > public void transform(final ClassTransformation transformation, > > > MutableComponentModel model) { > > > > > > > > > > > transformation.addImplementedInterface(RequestParameterExtractor.class); > > > TransformMethodSignature extractMethod = new > > > TransformMethodSignature(Modifier.PUBLIC, > > > "Map<String, String>", "extractRequestParameters", > > null, > > > null); > > > // if (transformation.isDeclaredMethod(extractMethod)) { > > > // return; > > > // } > > > > > transformation.getOrCreateMethod(extractMethod).addAdvice(new > > > ComponentMethodAdvice(){ > > > > > > public void advise(ComponentMethodInvocation invocation) > > { > > > Map<String, String> requestParameters = new > > > HashMap<String, String>(); > > > for (TransformField field : > > > > > > transformation.matchFieldsWithAnnotation(ActivationRequestParameter.class)) > > > { > > > String parameterName = getParameterName(field, > > > field.getAnnotation(ActivationRequestParameter.class)); > > > Class fieldType = > > > classCache.forName(field.getType()); > > > FieldAccess access = field.getAccess(); > > > ValueEncoder encoder = > > > valueEncoderSource.getValueEncoder(fieldType); > > > Object value = > > > access.read(invocation.getInstance()); > > > if (value == null) > > > continue; > > > String clientValue = encoder.toClient(value); > > > requestParameters.put(parameterName, > > clientValue); > > > } > > > invocation.overrideResult(requestParameters); > > > } > > > > > > }); > > > } > > > > > > private String getParameterName(TransformField field, > > > ActivationRequestParameter annotation) > > > { > > > if (annotation.value().equals("")) > > > return field.getName(); > > > > > > return annotation.value(); > > > } > > > > > > } > > > > > > Any ideas? > > > > > > Hi ! > > >> > > >> Tapestry 5.2 has a brand new API for class manipulation in worker, you > > >> have > > >> to provide the method signature and implement the logic in a > > >> ComponentMethodAdvice (see PropertyWorker sources to have a simple > > >> example) > > >> > > >> HTH > > >> > > >> 2010/9/7 Markus Feindler<markus.feind...@gmx.de> > > >> > > >> So, I tried to follow your advice, but I don't see how to add a new > > >>> method > > >>> after calling > > >>> "transformation.addImplementedInterface(MyInterface.class)". > > >>> The documentation states to use transformation.getOrCreateMethod, but > > >>> where > > >>> to define the message body? > > >>> > > >>> Actually, > > >>> > > >>>> I would implement a ClassTransformation and add it to > > >>>> contributeComponentClassTransformWorker (see Tapestry Module), This > > >>>> worker > > >>>> should add and implement an interface that contains the method to > > >>>> extract > > >>>> useful information from the page > > >>>> > > >>>> Then in your PageResponseRenderer, you can use ComponentSource to > > get > > >>>> the > > >>>> page instance, cast it to your interface and call the method. > > >>>> > > >>>> 2010/9/6 Markus Feindler<markus.feind...@gmx.de> > > >>>> > > >>>> Thats the class I discovered earlier at work. > > >>>> > > >>>>> Now my question is how to get ClassTransformation and > > >>>>> MutableComponentModel > > >>>>> from the Page Object in the PageResponseRenderer? > > >>>>> > > >>>>> Thanks for you help/hints. > > >>>>> > > >>>>> Regards markus > > >>>>> > > >>>>> Hi > > >>>>> > > >>>>> Logic is enclosed in ActivationRequestParameterWorker, i think you > > can > > >>>>>> adapt > > >>>>>> this to your needs and extract values. At the moment, I don't see > > any > > >>>>>> other > > >>>>>> way to identify ActivationRequestParameters during link creation. > > >>>>>> > > >>>>>> 2010/9/6 Markus Feindler<markus.feind...@gmx.de> > > >>>>>> > > >>>>>> i would say you can get them from > > >>>>>> > > >>>>>> Request directly > > >>>>>>> > > >>>>>>>> This only works for the current request. I need to get the > > >>>>>>>> parameters, > > >>>>>>>> > > >>>>>>>> which will be set for the next request/redirect. It would be > > >>>>>>> possible > > >>>>>>> to > > >>>>>>> write get methods for the ActivationRequestParameters, but that > > would > > >>>>>>> not > > >>>>>>> be > > >>>>>>> the right way. I need to find out how that is solved internally. > > >>>>>>> > > >>>>>>> > > >>>>>>> Oh sorry, i had mis-read your first message. I didn't get deep > > into > > >>>>>>> this > > >>>>>>> > > >>>>>>> new > > >>>>>>> > > >>>>>>>> feature at the time, but at first glance, i would say you can > > get > > >>>>>>>> them > > >>>>>>>> from > > >>>>>>>> Request directly. Maybe, you can implement a worker that will be > > in > > >>>>>>>> charge > > >>>>>>>> of implementing an interface that will contain the method that > > >>>>>>>> return > > >>>>>>>> the > > >>>>>>>> values. > > >>>>>>>> > > >>>>>>>> I will go deeper to see if there is not a more simple way of > > doing > > >>>>>>>> this. > > >>>>>>>> > > >>>>>>>> 2010/9/6 Markus Feindler<markus.feind...@gmx.de> > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> Thats what Im doing right now for the PageActivationContext, > > but I > > >>>>>>>> also > > >>>>>>>> > > >>>>>>>> need the values for the ActivationRequestParameters (introduced > > in > > >>>>>>>>> 5.2: > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > http://tapestry.apache.org/tapestry5.2-dev/apidocs/org/apache/tapestry5/annotations/ActivationRequestParameter.html > > >>>>>>>>> ). > > >>>>>>>>> > > >>>>>>>>> Hi > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> So why not passivate the page, see > > PageActivationContextCollector > > >>>>>>>>> ? > > >>>>>>>>> > > >>>>>>>>> This > > >>>>>>>>>> is > > >>>>>>>>>> how it works to create links. > > >>>>>>>>>> > > >>>>>>>>>> 2010/9/5 Markus Feindler<markus.feind...@gmx.de> > > >>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>>> No, Im trying to upgrade "my" portlet implementation from > > 5.1 to > > >>>>>>>>>> 5.2 > > >>>>>>>>>> > > >>>>>>>>>> and > > >>>>>>>>>>> up to now the activationrequestparameters aren't put in the > > url, > > >>>>>>>>>>> cause > > >>>>>>>>>>> I > > >>>>>>>>>>> have to adjust my former 5.1 custom response renderer. If the > > >>>>>>>>>>> Request > > >>>>>>>>>>> is > > >>>>>>>>>>> an > > >>>>>>>>>>> ActionRequest (see Portlet lifecycle) you can't write output > > into > > >>>>>>>>>>> a > > >>>>>>>>>>> stream > > >>>>>>>>>>> instead a redirect is done internally in the portlet > > container. > > >>>>>>>>>>> Therefore > > >>>>>>>>>>> I > > >>>>>>>>>>> have to add the parameters to the ActionReponse > > >>>>>>>>>>> (_actionResponse.setRenderParameter). In order to do so I > > need to > > >>>>>>>>>>> get > > >>>>>>>>>>> the > > >>>>>>>>>>> parameters. > > >>>>>>>>>>> > > >>>>>>>>>>> That's not enough details. > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> -- Josh > > >>>>>>>>>>> > > >>>>>>>>>>> On Sep 5, 2010, at 9:51 AM, Markus Feindler< > > >>>>>>>>>>>> markus.feind...@gmx.de> > > >>>>>>>>>>>> wrote: > > >>>>>>>>>>>> > > >>>>>>>>>>>> Need it for portlet implementation. > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> Hi > > >>>>>>>>>>>> > > >>>>>>>>>>>>> What is the purpose ? I guess you are dealing with some > > kind of > > >>>>>>>>>>>>>> dynamic > > >>>>>>>>>>>>>> stuff, please can you give more details ? > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> 2010/9/5 Markus Feindler<markus.feind...@gmx.de> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Hey folks, > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> I need to access page field values annotated with > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> ActivationRequestParameters in order to retrieve the > > values. > > >>>>>>>>>>>>>>> Reflection > > >>>>>>>>>>>>>>> doesnt work, because the fields are private and a > > >>>>>>>>>>>>>>> java.lang.IllegalAccessException is thrown. Whats the > > right > > >>>>>>>>>>>>>>> way > > >>>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>> retrieve > > >>>>>>>>>>>>>>> the values / activation request parameters? > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Regards > > >>>>>>>>>>>>>>> Markus > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > --------------------------------------------------------------------- > > >>>>>>>>>>>>>>> To unsubscribe, e-mail: > > >>>>>>>>>>>>>>> users-unsubscr...@tapestry.apache.org > > >>>>>>>>>>>>>>> For additional commands, e-mail: > > >>>>>>>>>>>>>>> users-h...@tapestry.apache.org > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> > > --------------------------------------------------------------------- > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> To unsubscribe, e-mail: > > >>>>>>>>>>>>>> users-unsubscr...@tapestry.apache.org > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> For additional commands, e-mail: > > >>>>>>>>>>>>> users-h...@tapestry.apache.org > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > --------------------------------------------------------------------- > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> To unsubscribe, e-mail: > > users-unsubscr...@tapestry.apache.org > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> For additional commands, e-mail: > > >>>>>>>>>>>> users-h...@tapestry.apache.org > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > --------------------------------------------------------------------- > > >>>>>>>>>>>> > > >>>>>>>>>>>> To unsubscribe, e-mail: > > users-unsubscr...@tapestry.apache.org > > >>>>>>>>>>> For additional commands, e-mail: > > users-h...@tapestry.apache.org > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > --------------------------------------------------------------------- > > >>>>>>>>>> > > >>>>>>>>>> To unsubscribe, e-mail: > users-unsubscr...@tapestry.apache.org > > >>>>>>>>> For additional commands, e-mail: > users-h...@tapestry.apache.org > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > --------------------------------------------------------------------- > > >>>>>>>> > > >>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > >>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>>> > > --------------------------------------------------------------------- > > >>>>>>> > > >>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > >>>>> For additional commands, e-mail: users-h...@tapestry.apache.org > > >>>>> > > >>>>> > > >>>>> > > >>>>> > > --------------------------------------------------------------------- > > >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > >>> For additional commands, e-mail: users-h...@tapestry.apache.org > > >>> > > >>> > > >>> > > >> > > > > > > > > > -- > > Regards, > > Christophe Cordenier. > > > > Committer on Apache Tapestry 5 > > Co-creator of wooki @wookicentral.com > > > > -- > GMX DSL SOMMER-SPECIAL: Surf & Phone Flat 16.000 für nur 19,99 Euro/mtl.!* > http://portal.gmx.net/de/go/dsl > -- Regards, Christophe Cordenier. Committer on Apache Tapestry 5 Co-creator of wooki @wookicentral.com