I overrode the SymbolBindingFactory with the attached
MySymbolBindingFactory and it appears to work, but I'd like a second
opinion. As I understand it Bindings are cached so my question is will
making the set method a no op instead of an error cause any problems?
I created this mixin to test it.

public class GridEnviromentMixin {
        @BindParameter
        private Boolean lean;
        
        @BindParameter
        private int rowsPerPage;
        
        @Inject
        private Environment environment;
        
        @Inject
        private Logger logger;
        
        @Inject
        private ComponentResources resources;
        
        @SetupRender
        void setupRender() {
                environment.push(GridEnvironment.class, new
GridEnvironmentImpl().withLean(lean));
                logger.info("rows {}",rowsPerPage);
                rowsPerPage= 10;
                logger.info("rows {}",rowsPerPage);

        }
        
        @CleanupRender
        void cleanupRender() {
                environment.pop(GridEnvironment.class);
        }

}

and the output is this

[INFO] mixins.GridEnviromentMixin rows 25
[INFO] mixins.GridEnviromentMixin rows 10


public class MySymbolBindingFactory implements BindingFactory {
        
        private final SymbolSource symbolSource;
        private final Logger logger;
        
               public MySymbolBindingFactory(SymbolSource symbolSource, Logger 
logger)
               {
                   this.symbolSource = symbolSource;
                   this.logger = logger;
               }
        
               public Binding newBinding(String description,
ComponentResources container,
                       ComponentResources component, String expression,
Location location)
               {
        
                   String value = symbolSource.valueForSymbol(expression);
                   logger.info("value {} {}",expression ,value);
                   return new SymbolBinding(location, description, value);
               }
        
               public class SymbolBinding implements Binding {
                   private Object value;
                
                
                   public SymbolBinding(Location location, String description,
String value) {
                           this.value = value;
                   }

                        @Override
                        public <T extends Annotation> T getAnnotation(Class<T> 
arg0) {
                                return null;
                        }

                        @Override
                        public Object get() {
                                return value;
                        }

                        @Override
                        public Class getBindingType() {
                                return value.getClass();
                        }

                        @Override
                        public boolean isInvariant() {
                                return false;
                        }

                        @Override
                        public void set(Object value) {
                                //this.value = value;
                        }
                
               }

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to