I did consider forcing creation of seam-enabled wicket components
through a factory and just returning a proxy, however this struck me
as fairly un-wicket-like as it seemed to me that the simplicity of
Wicket was that you could use new and anonymous inner classes. Maybe
we do a POC using factories for now, and look at classloading tricks
or Paolo's idea as a second step.
On 12 May 2008, at 16:03, Igor Vaynberg wrote:
i think thats what pax wicket does for osgi integration
-igor
On Mon, May 12, 2008 at 12:07 AM, Johan Compagner <jcompagner(a)gmail.com
> wrote:
> You could create a factory where you ask your instances from
> instead of new...
>
>
>
> On 5/12/08, Paolo Di Tommaso <paolo.ditommaso(a)gmail.com> wrote:
>> Other than using AspectJ to intercept the @Begin annotated
>> methods, I don't
>> see an elegant/straightforward solution.
>>
>>
>> An idea could be to subclass WebPage adding a visitor to look for
>> all
>> components implementing IFormSubmitListener interface
>> (ILinkListener .. and
>> so on).
>>
>> That components should be replaced dynamically with an interceptor
>> proxy.
>>
>> Anyway it would be a partial solution because in Wicket action
>> could be
>> submitted with behaviour also.
>>
>> Core developers any ideas?
>>
>>
>> // Paolo
>>
>>
>>
>> On Fri, May 9, 2008 at 6:27 PM, Pete Muir
>> <pmuir(a)bleepbleep.org.uk> wrote:
>>
>>> All,
>>> Looking for some ideas/suggestions here (perhaps I am missing a
>>> trick
>>> here?).
>>>
>>> Wicket binds html layout/styling to Java objects which define the
>>> component
>>> behaviour:
>>>
>>> public class Home extends WebPage {
>>>
>>> @In Foo foo;
>>>
>>> public Home(final PageParameters parameters) {
>>> add(new LoginForm("login"));
>>> }
>>> }
>>>
>>> is doable, as we use a component instantiation callback (provided
>>> by
>>> Wicket) to make foo a proxy which asks Seam for the component
>>> *every time*
>>> the object is accessed. This is pretty ugly though, and I would
>>> prefer to
>>> use injection/disinjection.
>>>
>>> However, if we want to do:
>>>
>>> public class LoginForm extends Form {
>>> public LoginForm(String id) {
>>> super(id);
>>> add(new TextField("username", new PropertyModel(identity,
>>> "username")));
>>> add(new PasswordTextField("password", new
>>> PropertyModel(identity,
>>> "password")));
>>> }
>>>
>>> @Begin
>>> protected void onSubmit() {
>>> // Authenticate, and display feedback to user
>>> }
>>> }
>>> }
>>> }
>>>
>>> then no lifecycle callback will help.
>>>
>>> As you can see the new operator is used almost exclusively. This
>>> means we
>>> can't use a proxy based interceptor system. So, AFAICS we have to
>>> use byte
>>> code enhancement to apply an interceptor, I guess either at
>>> compile time
>>> or
>>> through a custom classloader.
>>>
>>> So,
>>>
>>> 1) is it worth it (this is starting to get very fiddly)?
>>> 2) is there a better way?
>>>
>>> Thanks :)
>>>
>>> _______________________________________________
>>> seam-dev mailing list
>>> seam-dev(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/seam-dev
>>>
>>>
>>
>