http://wicketinaction.com/2008/10/creating-pluggable-applications-with-wicket-and-spring/
-igor 2011/3/4 Leszek Gawron <[email protected]>: > Hello, > > Let's say I want to write some UI to edit some complicated configuration > split into multiple entities in multiple maven modules. The UI needs to have > one entry point though. So: > > Let's create the UI based on TabbedPanel. Each of the tabs will be provided > by different maven modules by the means of factories: > > > public interface JukeboxConfigPanelFactory extends Ordered { >> >> public IModel<String> getPanelTitle(); >> >> public Panel getPanel( String id, IModel<Jukebox> jukeboxModel ); >> } > > > > Provided that I have a list of all panel factories (that is an actual > problem!) I can do that: > > >> List<ITab> tabs = new ArrayList<ITab>(); >> >> for ( JukeboxConfigPanelFactory factory : >> getPanelFactories() ) { >> tabs.add( new >> JukeboxConfigPanelFactoryAwareAbstractTab( factory, getJukeboxModel() ) ); >> } >> >> add( new AjaxTabbedPanel( "tabs", tabs ) ); > > The problem is: HOW do I get all the panel factories defined in Spring > context? > > I cannot do : > > @SpringBean > private List<JukeboxConfigPanelFactory> factories; > > because this is not supported by > org.apache.wicket.spring.injection.annot.AnnotProxyFieldValueFactory. > > I could create another spring bean: > >> public interface JukeboxConfigPanelFactoryManager { >> public List<JukeboxConfigPanelFactory> getPanelFactoryList(); >> } > > >> @Component >> public class JukeboxConfigPanelFactoryManagerImpl implements >> JukeboxConfigPanelFactoryManager, InitializingBean { >> private List<JukeboxConfigPanelFactory> factoryList; >> >> @Autowired >> public JukeboxConfigPanelFactoryManagerImpl( >> List<JukeboxConfigPanelFactory> factoryList ) { >> this.factoryList = factoryList; >> } >> >> @Override >> public List<JukeboxConfigPanelFactory> getPanelFactoryList() { >> return Collections.unmodifiableList( factoryList ); >> } >> >> @Override >> public void afterPropertiesSet() throws Exception { >> Collections.sort( factoryList, >> new >> OrderComparator() ); >> } >> } > > so now I am able to get all factory implementations in one place: > >> List<ITab> tabs = new ArrayList<ITab>(); >> >> for ( JukeboxConfigPanelFactory factory : >> panelFactoryManager.getPanelFactoryList() ) { >> tabs.add( new >> JukeboxConfigPanelFactoryAwareAbstractTab( factory, getJukeboxModel() ) ); >> } >> >> add( new AjaxTabbedPanel( "tabs", tabs ) ); > > But now the JukeboxConfigPanelFactoryAwareAbstractTab will fail miserably at > serializing as only the manager has been wrapped with a proxy and not the > factories underneath. > > How can I approach the problem using current state of wicket-spring module? > I haven't found a way to wrap the "factory" beans with proxy manually. > > -- > Leszek Gawron http://lgawron.blogspot.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
