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]

Reply via email to