Bonjour à tous,
Je suis tout nouvellement arrivé dans JSF et RichFaces, et je me retrouve confronté à un problème que je n'arrive pas à comprendre.
J'ai défini un élément de menu comme suit (menuContentLink.xhtml) :
Et je réalise l'appel à ce composant par ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <rich:panelMenuItem hoverClass="panelMenuItemHover" label="#{label}" action="#{action}" icon="/resources/images/icons/empty.gif" style="background-color: #F4F4F4;"> <a4j:actionparam name="include" value="#{include}" assignTo="#{NavigationBean.contentInclude}" /> </rich:panelMenuItem>
Le paramètre include fonctionne parfaitement et NavigationBean est correctement mis à jour avec l'adresse de la prochaine page à mettre dans le panel principal de ma page. Par contre, le clic sur le lien qui s'affiche exécute l'action et lève cette exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <mytags:menuContentLink label="#{msgs.newAgenda}" action="#{AgendaBean.clear}" include="/pages/includes/leftNavigationAgenda/agendaEdit.xhtml" />
Mon bean est pourtant tout simple et voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /WEB-INF/myTags/menuContentLink.xhtml @7,169 action="#{action}": /pages/includes/navigation/leftNavigationAgenda.xhtml @9,150 action="#{AgendaBean.clear}": Property 'clear' not found on type ch.test.presentation.web.beans.AgendaBean
La fonction clear est donc bien définie dans le bon bean, je ne vois pas pourquoi il n'est pas possible de l'appeler de la façon dont je l'ai faite (en passant l'action à réaliser en paramètre au travers de l'attribut "action" de mon composant menuContentLink).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
38
39
40
41
42
43
44 package ch.test.presentation.web.beans; import java.io.Serializable; import org.apache.log4j.Logger; import ch.test.common.dto.AgendaDTO; import ch.test.presentation.web.util.ServiceLocator; public class AgendaBean implements Serializable { private static final long serialVersionUID = 1L; private AgendaDTO agenda = new AgendaDTO(); private static final Logger logger = Logger.getLogger(AgendaBean.class); public void save(){ if(agenda.getAgendaId() == null){ ServiceLocator.getApplicationService().insertAgenda(this.agenda); } else{ ServiceLocator.getApplicationService().updateAgenda(this.agenda); } } public void search(){ if(agenda.getAgendaId() != null){ this.agenda = ServiceLocator.getApplicationService().findAgenda(agenda.getAgendaId()); } } public void clear(){ logger.debug("Clearing the AgendaBean state"); this.agenda = new AgendaDTO(); } public AgendaDTO getAgenda(){ return this.agenda; } public void setAgenda(AgendaDTO agenda){ this.agenda = agenda; } }
J'arrive par contre parfaitement à appeler save() et search() à d'auters endroit de l'application, typiquement avec l'appel ci-dessous :
Auriez-vous une idée pourquoi l'appel par l'intermédiaire d'un passage par attribut ne fonctionne pas dans mon cas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <a4j:commandButton value="insert" action="#{AgendaBean.save}" reRender="content"> <a4j:actionparam name="include" value="/pages/includes/leftNavigationAgenda/agendaPrint.xhtml" assignTo="#{NavigationBean.contentInclude}" /> </a4j:commandButton>
Merci de m'indiquer si il faut plus de précisions par rapport à mon code, je donnerai plus de détails si besoin.
Partager