Uploaded image for project: 'Tapestry 5'
  1. Tapestry 5
  2. TAP5-818

Tapestry should properly support JDK 1.5 Generics when reading and updating properties and property expressions

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 5.1.0.5
    • 5.2.1
    • tapestry-core
    • None
    • Tapestry 5.1.0.5
      JDK5

    Description

      Below is the example
      KeyedObject.java:used to store string keyed object
      import java.util.*;
      import java.util.Map.Entry;
      public class KeyedObject<T> {
      private String key;
      private T value;
      public String getKey()

      { return key; }

      public void setKey(String key)

      { this.key = key; }

      public T getValue()

      { return value; }

      public void setValue(T value)

      { this.value = value; }


      }

      page java class:dbpools simply put BasicDataSource and its key name into a KeyObject list
      import java.util.Iterator;
      import java.util.LinkedList;
      import java.util.List;
      import java.util.Map;
      import java.util.Map.Entry;

      import org.apache.commons.dbcp.BasicDataSource;
      import org.apache.tapestry5.annotations.Property;
      import org.apache.tapestry5.ioc.annotations.Inject;

      import com.elite.predictob.EliteOBManagerProxy;
      import com.elite.predictob.KeyedObject;

      public class dbpools {
      @Inject
      private EliteOBManagerProxy proxy;

      @Property
      private KeyedObject<BasicDataSource> datasource;

      public List<KeyedObject<BasicDataSource>> getDatasources()
      {
      Map dbmap=proxy.getManager().getDataSources();
      synchronized (dbmap) {
      List<KeyedObject<BasicDataSource>> list=new LinkedList<KeyedObject<BasicDataSource>>();
      Iterator<Entry<String,BasicDataSource>> it=dbmap.entrySet().iterator();
      while(it.hasNext())

      { Entry<String,BasicDataSource> entry=it.next(); KeyedObject<BasicDataSource> obj=new KeyedObject<BasicDataSource>(); obj.setKey(entry.getKey()); obj.setValue(entry.getValue()); list.add(obj); }

      return list;
      }
      }
      }

      page template:
      <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
      xmlns="tapestry:parameter"
      xmlns:cl="cl">
      <head>
      <t:elite.cachecontrol.cachecontrol/>
      <title>${message:dbpoolconfig}</title>
      </head>
      <body>
      <table border="1">
      <tr t:type="loop" t:element="tr" t:source="datasources" value="datasource">
      <td>${datasource.key}</td><td>${datasource.value.numActive}</td>
      </tr>
      </table>
      </body>
      </html>

      ${datasource.value.numActive} will cause following error:
      Could not convert 'datasource.value.numActive' into a component parameter binding: Class java.lang.Object does not contain a property named 'numActive' (within property expression 'datasource.value.numActive'). Available properties: class.

      Attachments

        1. PropertyConduitGenerics.patch
          81 kB
          Josh Canfield

        Activity

          People

            hlship Howard Lewis Ship
            maxyu maxyu
            Votes:
            1 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: