This is great, Iwan! Thank you much. I would like to suggest adding it to
the Stripes Wiki
-a
On 14 July 2010 03:51, Iwao AVE! <[email protected]> wrote:
> Hi Aaron,
>
> Aaron Stromas wrote on 10/07/14 3:44:
> > Is there no way of avoiding the global change,
> > to restricting its scope?
>
> The following post shows how to change the population strategy per
> action bean.
>
> http://article.gmane.org/gmane.comp.java.stripes.user/5316
>
> ...and here's the one I have used in a few project (slightly edited for
> reducing lines).
>
> -- population strategy --
>
> public class SelectivePopulationStrategy implements PopulationStrategy {
> private static final Log LOG =
> Log.getInstance(SelectivePopulationStrategy.class);
> private Configuration config;
> private PopulationStrategy defaultDelegate;
> private Map<Class<? extends PopulationStrategy>, PopulationStrategy>
> delegates = new HashMap<Class<? extends PopulationStrategy>,
> PopulationStrategy>();
> private Map<Class<? extends ActionBean>, PopulationStrategy>
> actionBeanStrategies = new HashMap<Class<? extends ActionBean>,
> PopulationStrategy>();
>
> protected PopulationStrategy getDelegate(InputTagSupport tag) throws
> StripesJspException {
> ActionBean actionBean = tag.getActionBean();
> if (actionBean == null)
> return defaultDelegate;
> Class<? extends ActionBean> beanType = actionBean.getClass();
> PopulationStrategy delegate = actionBeanStrategies.get(beanType);
> if (delegate != null)
> return delegate;
> CustomPopulationStrategy annotation =
> beanType.getAnnotation(CustomPopulationStrategy.class);
> if (annotation == null)
> delegate = defaultDelegate;
> else {
> Class<? extends PopulationStrategy> type = annotation.value();
> delegate = delegates.get(type);
> if (delegate == null) {
> try {
> delegate = type.newInstance();
> delegate.init(config);
> delegates.put(type, delegate);
> } catch (Exception e) {
> delegate = defaultDelegate;
> LOG.info("Could not instantiate population strategy of name
> [" + type + "]", e);
> }
> }
> }
> actionBeanStrategies.put(beanType, delegate);
> return delegate;
> }
>
> public Object getValue(InputTagSupport tag) throws StripesJspException {
> PopulationStrategy strategy = getDelegate(tag);
> Object value = (strategy).getValue(tag);
> return value;
> }
>
> public void init(Configuration configuration) throws Exception {
> this.config = configuration;
> defaultDelegate = new DefaultPopulationStrategy();
> defaultDelegate.init(config);
> }
> }
>
> -- annotation --
> @Retention(RetentionPolicy.RUNTIME)
> public @interface CustomPopulationStrategy {
> Class<? extends PopulationStrategy> value() default
> DefaultPopulationStrategy.class;
> }
>
> -- how to use --
> Drop the SelectivePopulationStrategy into stripes' extension package and
> annotate the action bean which uses BeanFirstPopulationStrategy as follows.
>
> @CustomPopulationStrategy(BeanFirstPopulationStrategy.class)
> public class YourActionBean ...
>
> Other (unannotated) action beans will use the DefaultPopulationStrategy.
>
> Regards,
> Iwao
>
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> Stripes-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/stripes-users
>
--
Aaron Stromas
Mobile: +1 703 203 9169
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Stripes-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-users