I have implemented the GenericSelectModel as written in wiki
(http://wiki.apache.org/tapestry/Tapestry5HowtoSelectWithObjects) and
it worked fine.
However, recently I add a new Bean class and create a
GenericSelectModel for it , and the nightmare come.
For other bean class , no problem. Only for this particular bean
class.(UnitMeasurement)
After debugging ..
I found out that , in the function toClient(T object) , we suppose to
receive parameter object as a bean class instance . however, for this
UnitMeasurement class
the object is String type, more precise , is a toString() value for
the bean instance
I hv checked whether I pass in the model and encoder correctly or not
, yes, it is correct. I really hv no idea to solve .. please help.
Thanks.
T5 version : 5.0.18
Rgds,
CG
Error
====
[toClient] obj : MaterialType: [id=1, type=R, description=Raw
Material, isProduced=false, isPurchased=true, isForSales=false,
isJIT=true, record status=A, session id=, create login=admin, create
app=, create timestamp=2008-09-30 21:27:09.0, modify login=admin,
modify app=MaterialTypeMaintenance, modify time=2008-10-06
21:44:51.0,
version=0]
[toClient] obj : MaterialType: [id=1, type=R, description=Raw
Material, isProduced=false, isPurchased=true, isForSales=false,
isJIT=true, record status=A, session id=, create login=admin, create
app=, create timestamp=2008-09-30 21:27:09.0, modify login=admin,
modify app=MaterialTypeMaintenance, modify time=2008-10-06
21:44:51.0,
version=0]
[toClient] obj : MaterialType: [id=2, type=S,
description=Semi-Finished Material, isProduced=true,
isPurchased=false, isForSales=false, isJIT=true, record status=A,
session id=, create login=admin, create app=, create
timestamp=2008-09-30 21:27:09.0, modify login=admin, modify
app=MaterialTypeMaintenance, modify time=2008-10-25 00:48:43.0,
version=0]
[toClient] obj : MaterialType: [id=3, type=F, description=Finished
Goods, isProduced=true, isPurchased=false, isForSales=true,
isJIT=false, record status=A, session id=, create login=admin, create
app=, create timestamp=2008-09-30 21:27:09.0, modify login=admin,
modify app=, modify time=2008-09-30 21:27:09.0, version=0]
[toClient] obj : MaterialType: [id=4, type=P, description=Phantom
Material, isProduced=true, isPurchased=false, isForSales=false,
isJIT=true, record status=A, session id=, create login=admin, create
app=, create timestamp=2008-10-02 22:28:33.0, modify login=admin,
modify app=MaterialTypeMaintenance, modify time=2008-10-25
00:51:09.0,
version=0]
[toClient] obj : MaterialType: [id=5, type=T, description=Trading
Material, isProduced=false, isPurchased=true, isForSales=true,
isJIT=false, record status=A, session id=, create login=admin, create
app=, create timestamp=2008-10-04 00:36:53.0, modify login=admin,
modify app=MaterialTypeMaintenance, modify time=2008-10-25
00:51:19.0,
version=0]
[toClient] obj : MaterialType: [id=6, type=C, description=Consumable
Material, isProduced=false, isPurchased=true, isForSales=false,
isJIT=false, record status=A, session id=, create login=admin, create
app=MaterialTypeMaintenance, create timestamp=2008-10-06 21:49:31.0,
modify login=admin, modify app=MaterialTypeMaintenance, modify
time=2008-10-25 00:51:29.0, version=0]
[toClient] obj : UOM: [id=1, record status=A, session id=1, create
login=manual, create app=manual, create timestamp=2008-12-15
00:00:00.0, modify login=manual, modify app=manual, modify
time=2008-12-15 00:00:00.0, version=1]
23:43:23,759 ERROR [MaterialMaintenance] Render queue error in
BeforeRenderTemplate[MaterialMaintenance:uom]: Error reading property
'id' of UOM: [id=1, record status=A, session id=1, create
login=manual, create app=manual, create timestamp=2008-12-15
00:00:00.0, modify login=manual, modify app=manual, modify
time=2008-12-15 00:00:00.0, version=1]: object is not an instance of
declaring class
org.apache.tapestry5.ioc.internal.util.TapestryException: Error
reading property 'id' of UOM: [id=1, record status=A, session id=1,
create login=manual, create app=manual, create timestamp=2008-12-15
00:00:00.0, modify login=manual, modify app=manual, modify
time=2008-12-15 00:00:00.0, version=1]: object is not an instance of
declaring class [at context:MaterialMaintenance.tml, line 60, column
129]
at
org
.apache
.tapestry5
.internal
.structure
.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:932)
at
org
.apache.tapestry5.internal.structure.ComponentPageElementImpl.access
$200(ComponentPageElementImpl.java:50)
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl
$10.render(ComponentPageElementImpl.java:325)
at org.apache.
Page class Code
==========
uomsSelect = null;
materialTypesSelect = null;
uomsSelect = new
GenericSelectModel
<
UnitMeasurement
>(uoms,UnitMeasurement.class,"shortForm","id",_access_uom);
materialTypesSelect = new
GenericSelectModel
<
MaterialType
>(materialTypes,MaterialType.class,"typeDescription","id",_access);
Tml template
========
<tr>
<th><t:label
t:for="MaterialType">MaterialType</t:label>:</th>
<td> <select t:type="select"
t:id="materialType" t:model="materialTypesSelect"
encoder="materialTypesSelect" t:value="materialType" /> </td>
</tr>
<tr>
<th><t:label t:for="UOM">Unit Of
Measurement</t:label>:</th>
<td> <select t:type="select" t:id="UOM"
t:model="uomsSelect" encoder="uomsSelect" t:value="UOM" /> </td>
</tr>