tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Tapestry Wiki] Update of "Tapestry5HowToAddBindingPrefix" by DavorHrg
Date Sun, 12 Aug 2007 07:02:48 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Tapestry Wiki" for change notification.

The following page has been changed by DavorHrg:
http://wiki.apache.org/tapestry/Tapestry5HowToAddBindingPrefix

------------------------------------------------------------------------------
      {
          List<Binding> delegates = new ArrayList<Binding>();
          String[] bindingNames = expression.split(",");
+         boolean isInvariant=true;
          
          for (String bindingName : bindingNames){
              String defaultBinding = TapestryConstants.LITERAL_BINDING_PREFIX;
@@ -76, +77 @@

                  }
              }
  
-             delegates.add(_bindingSource.newBinding(description, container, component, defaultBinding,
bindingName, location));
+             Binding binding = _bindingSource.newBinding(description, container, component,
defaultBinding, bindingName, location);
+             isInvariant = isInvariant && binding.isInvariant();
+             delegates.add(binding);
          }
-         
+ 
-         return new ListBinding(delegates);
+         return new ListBinding(delegates, isInvariant);
      }
  }
  }}}
@@ -88, +91 @@

  {{{
  public class ListBinding extends AbstractBinding{
      private final List<Binding> delegates;
+     private final boolean _invariant;
  
-     public ListBinding(List<Binding> delegates) {
+     public ListBinding(List<Binding> delegates, boolean invariant) {
          this.delegates = delegates;
+         _invariant = invariant;
      }
  
      public Object get() {
@@ -105, +110 @@

      
      @Override
      public boolean isInvariant() {
-         return false;
+         return _invariant;
      }
      
      @Override
@@ -115, +120 @@

  }
  }}}
  !Notice: although we named this binding "list" the value returned is an Object array, but
tapestry will easily convert between the two. If you like, you can easily change this to return
"List"[[BR]]
- !Notice#2: you must override isInvariant and "return false" to avoid value being cached

+ !Notice#2: you must override isInvariant and "return false" to avoid value being cached
(in this example we return true if all sub expressions are invariant)
  
  And that's it, you now have your own binding prefix. It splits the expression on "," and
each subexpression will be evaluated as it was single binding expression (with exception for
numeric values and values surrounded with ' ', which are prefixed literal).
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Mime
View raw message