Bonjour à tous.

Je vous explique en quelque mot ce que je veux faire. J'ai un panelGrid que je crée dynamiquement suivant que l'utilisateur ajout ou non des membres dans l'application.

Dans ce panelGrid j'ai des inputText qui servent à calculer un total.

J'aimerais que lorsque l'on change la valeur dans l'un de ces inputText, mon panelGrid se reconstruise.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
	<h:form id="panelGridForm">
			<h:panelGrid binding="#{bean.somePanelGrid}" id="panel"
				rowClasses="row1, row2">
			</h:panelGrid>	
		</h:form>
Dans la méthode qui construit mon panelGrid, j'ai rajouté ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 HtmlAjaxSupport ajaxSupport = new HtmlAjaxSupport();  
			 ajaxSupport.setEvent("onchange"); 
			 ajaxSupport.addActionListener(new myActionListener());
			 ajaxSupport.setReRender("panelGridForm:panel");      
			 inputText.getChildren().add(ajaxSupport);
Mon myActionListener est une simple class test qui donne ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
class myActionListener implements ActionListener
	{
		@Override
		public void processAction(ActionEvent arg0)
				throws AbortProcessingException {
			// TODO Auto-generated method stub
			System.out.println("areuh");
		}
 
 
	}
Lorsque je change la valeur de mon input, une jolie exception est lancée :

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
 
java.lang.IllegalStateException: controllers.bean$myActionListener
	at javax.faces.component.StateHolderSaver.restore(StateHolderSaver.java:109)
	at javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:1433)
	at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1298)
	at javax.faces.component.UICommand.restoreState(UICommand.java:337)
	at org.ajax4jsf.component.html.HtmlAjaxSupport.restoreState(HtmlAjaxSupport.java:655)
	at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1166)
	at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1182)
	at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1182)
	at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1182)
	at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1182)
	at javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1182)
	at org.ajax4jsf.application.AjaxStateManager.restoreView(AjaxStateManager.java:415)
	at com.sun.faces.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:316)
	at org.ajax4jsf.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:116)
	at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:176)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:104)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Deux questions :

1°D'après vous qu'est que j'ai mal fait, oublié?
2° Y'a t-il moyen de faire autrement?