IMHO the best way to solve this is a Dependency Injection Framework. Have a look at guice http://code.google.com/p/google-guice/ Add your Interfaces the @ImplementedBy(<apacke.aclass>) annotation and tell the injetor to instantiate the properties of your bean which are annotated with @Inject. You can do this in your @Before methods or with a global interceptor. Best regards, Richard
2009/2/22 otismo <[email protected]>: > > What's the cleanest way to handle this situation? > > I've got nested business objects that implement interfaces so the client is > never privy to the concrete classes. Of course when I try to use Stripes > default instantiation, it complains (see message below) because it sees the > interface and doesn't know what type of concrete class to implement. > > >From ReflectUtil.getInterfaceInstance() > "Stripes needed to instantiate a property who's declared type as an " + > "interface (which obviously cannot be instantiated. The > interface is not " + > "one that Stripes is aware of, so no implementing class > was known. The " + > "interface type was: '" + interfaceType.getName() + "'. > To fix this " + > "you'll need to do one of three things. 1) Change the > getter/setter methods " + > "to use a concrete type so that Stripes can instantiate > it. 2) in the bean's " + > "setContext() method pre-instantiate the property so > Stripes doesn't have to. " + > "3) Bug the Stripes author ;) If the interface is a JDK > type it can easily be " + > "fixed. If not, if enough people ask, a generic way to > handle the problem " + > "might get implemented."); > > It would be great if there were a way to specify a mapping for an interface > to an instantiator so that I could define a method to handle the > instantiation. > > Is there a way to do that? I got the impression from the message above that > there was not. > > Barring that, I could try to pre-instantiate the concrete class as suggested > in the message above, but I'm not sure the best way to do that. Should I > set up a @Before binding with a handler that iterates through all the > request parameters and pre-instantiates based on those? That seems a little > clunky. > > So basically, this is my situation: > > In the .jsp: > <s:text name="snapshot.goals.dietGoals[${loop.index}].text" /> > > snapshot.getGoals().getDietGoals() returns a List<Goal>. Goal is an > interface. snapshot.getGoals() returns a Goals interface which has a > method, Goal getDietGoal(String text), which returns an instance of a Goal. > > I really just want to tell Stripes to use goals.getDietGoal(text) to > instantiate my type. > > Is there a good way to do that? > > Thanks, > Peter > -- > View this message in context: > http://www.nabble.com/preinstantiate-interface-type-tp22152219p22152219.html > Sent from the stripes-users mailing list archive at Nabble.com. > > > ------------------------------------------------------------------------------ > Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA > -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise > -Strategies to boost innovation and cut costs with open source participation > -Receive a $600 discount off the registration fee with the source code: SFAD > http://p.sf.net/sfu/XcvMzF8H > _______________________________________________ > Stripes-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/stripes-users > ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ Stripes-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/stripes-users
