[Tapestry 4] Composant @For
Bonjour tout le monde,
Je suis tout neuf dans l'utilisation du framework MVC Tapestry et de ce que j'en est vue, il est selon moi le plus puissant et le plus facile des framework pour la création de site web, même complexe.
J'utilisais Struts avant mais là, je suis passé à Tapestry :wink:
Bon, alors mon problème est le suivant: Tapestry ne retrouve pas mon objet contenu dans ma Collection (ArrayList) à partir du composant For
Template Home.html
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
<html jwcid="@Shell" title="Prototype: Gestionnaire d'event">
<body>
<p>
<h2>Liste des évènements</h2>
<table cellspacing="10" border="0">
<tr>
<td>Titre</td>
<td>Date</td>
<td>Heure</td>
</tr>
<tr>
<td colspan="3"><hr/></td>
</tr>
<tr jwcid="@For" source="ognl:eventList" value="ognl:event" element="tr">
<td><span jwcid="@Insert" value="ognl:event.titre">Chasse aux Yubos</span></td>
<td><span jwcid="@Insert" value="ognl:event.date">05/08/2006</span></td>
<td><span jwcid="@Insert" value="ognl:event.heure">20:30 GMT+1</span></td>
</tr>
<tr jwcid="$remove$">
<td>Chasse aux Yubos</td>
<td>05/08/2006</td>
<td>20:30 GMT+1</td>
</tr>
<tr jwcid="$remove$">
<td>Chasse aux Yubos</td>
<td>05/08/2006</td>
<td>20:30 GMT+1</td>
</tr>
<tr jwcid="$remove$">
<td>Chasse aux Yubos</td>
<td>05/08/2006</td>
<td>20:30 GMT+1</td>
</tr>
</table>
</body>
</html> |
La classe Home.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
package prototype.pages;
import java.util.*;
import org.apache.log4j.*;
import org.apache.tapestry.event.*;
import org.apache.tapestry.html.*;
import org.apache.tapestry.annotations.*;
import prototype.datas.*;
import prototype.handler.*;
public abstract class Home extends BasePage implements PageBeginRenderListener {
private static Logger logger = Logger.getLogger(Home.class.getName());
public abstract ArrayList<Event> getEventList();
public abstract void setEventList(ArrayList<Event> event);
public void pageBeginRender(PageEvent event) {
logger.info("Exécution de \"pageBeginRender\"");
EventHandler eh = new EventHandler();
ArrayList<Event> eventList = eh.getEventList();
logger.debug(eventList.toString());
setEventList(eventList);
}
} |
Le logger indique bien que mon objet Event a été instancié et se trouve dans eventList.
La classe Event est un simple bean se trouvant dans mon package
prototype.datas.
C'est mon handler qui se trouve dans prototype.handler qui s'occupe de l'instancier et de créer l'ArrayList eventList
Et voilà l'erreur (version light vu la taille de la page :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
org.apache.tapestry.BindingException
Unable to update OGNL expression '<parsed OGNL expression>' of $Home_0@35dc95[Home] to prototype.datas.Event@1ebf4ff: $Home_0.event
binding: ExpressionBinding[Home event]
location: context:/Home.html, line 15
10 <td>Heure</td>
11 </tr>
12 <tr>
13 <td colspan="3"><hr/></td>
14 </tr>
15 <tr jwcid="@For" source="ognl:eventList" value="ognl:event" element="tr">
16 <td><span jwcid="@Insert" value="ognl:event.titre">Chasse aux Yubos</span></td>
17 <td><span jwcid="@Insert" value="ognl:event.date">05/08/2006</span></td>
18 <td><span jwcid="@Insert" value="ognl:event.heure">20:30 GMT+1</span></td>
19 </tr>
20 <tr jwcid="$remove$">
org.apache.hivemind.ApplicationRuntimeException
Unable to update OGNL expression '<parsed OGNL expression>' of $Home_0@35dc95[Home] to prototype.datas.Event@1ebf4ff: $Home_0.event
component: $Home_0@35dc95[Home]
location: context:/Home.html
ognl.NoSuchPropertyException
$Home_0.event
name: event
target: $Home_0@35dc95[Home]
Stack Trace:
ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:133)
ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1629)
ognl.ASTProperty.setValueBody(ASTProperty.java:105)
ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
ognl.SimpleNode.setValue(SimpleNode.java:246)
ognl.Ognl.setValue(Ognl.java:476)
org.apache.tapestry.services.impl.ExpressionEvaluatorImpl. |
Le descripteur de l'application tout simple :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<?xml version="1.0"?>
<!DOCTYPE application PUBLIC
"-//Apache Software Foundation//Tapestry Specification 4.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<application>
<meta key="org.apache.tapestry.page-class-packages" value="prototype.pages"/>
</application> |
J'ai dû râter quelque chose mais je ne vois pas quoi :cry:
Merci d'avance :D