Tapestry 5
  1. Tapestry 5
  2. TAP5-818

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

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 5.1.0.5
    • Fix Version/s: 5.2.1
    • Component/s: tapestry-core
    • Labels:
      None
    • Environment:
      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.

        Activity

          People

          • Assignee:
            Howard M. Lewis Ship
            Reporter:
            maxyu
          • Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development