You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Josh Canfield (JIRA)" <ji...@apache.org> on 2010/08/16 06:00:18 UTC

[jira] Commented: (TAP5-818) JDK5 Generic is not supported by property chain

    [ https://issues.apache.org/jira/browse/TAP5-818?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12898788#action_12898788 ] 

Josh Canfield commented on TAP5-818:
------------------------------------

"As the type of T is not known until runtime, all Tapestry know is that T is Object."

Actually everything needed to support this case is available when the PropertyConduit is created. Tapestry is currently evaluating the expression without considering the context provided by the class which owns the property. 


> JDK5 Generic is not supported by property chain
> -----------------------------------------------
>
>                 Key: TAP5-818
>                 URL: https://issues.apache.org/jira/browse/TAP5-818
>             Project: Tapestry 5
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.1.0.5
>         Environment: Tapestry 5.1.0.5
> JDK5
>            Reporter: maxyu
>
> 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:p="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.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.