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 <[EMAIL PROTECTED] > wrote:
You could create a factory where you ask your instances from instead of new...



On 5/12/08, Paolo Di Tommaso <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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
[EMAIL PROTECTED]
https://lists.jboss.org/mailman/listinfo/seam-dev





Reply via email to