Bonjour,

Nous avons migrée une application qui tournait sous Tomcat 5 avec JSF 1.1 comme framwork de présentation vers un serveur JBoss 4 et du JSF 1.2.

Dans le code nous utilisons des custom EL Function qui nous permette de faire de la concaténation :

dans la jsp
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
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:t="http://myfaces.apache.org/tomahawk"
	xmlns:myaudit="http://montag"
	>
....
 
 
<h:commandButton class="bouton" id="boutton1"
				value="#{monBean.value}"
				actionListener="#{monBean.doAction}">
				</h:commandButton>
 
....
 
<h:outputText value="#{<nom_du_resource_bundle>[montag:concat(chaine1,chaine2)]}" />
mon-custom-tag.taglib.xml
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
 
<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
  "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
  "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
 
<facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
	<namespace>http://montag</namespace>
	<function>
		<function-name>concat</function-name>
 
		<function-class>com.MaClasseUtil</function-class>
		<function-signature>
			java.lang.String concat(java.lang.String, java.lang.String)
		</function-signature>
	</function>	
</facelet-taglib>
Dans web.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
<context-param>
		<param-name>facelets.LIBRARIES</param-name>
		<param-value>/WEB-INF/tomahawk.taglib.xml; /WEB-INF/mon-custom-tag.taglib.xml</param-value>
	</context-param>
Lors du 1er chargement de la page JSP, j'ai ma custom fonction qui s'exécute correctement. Le problème survient lorsque je clique sur le bouton qui va m'effectuer l'action définit dans l'actionlistener et revient sur la page. La j'ai une exception qui me dit que la fonction montag:concat n'est pas trouvée.
j'ai vérifié sous Tomcat cela fonctionne correctement....

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
javax.faces.FacesException: Exception while calling encodeEnd on component : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /user/profilDetail.jsp][Class: javax.faces.component.html.HtmlForm,Id: referentiel][Class: org.apache.myfaces.component.html.ext.HtmlDataTable,Id: profilLines][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: j_id110][Class: org.apache.myfaces.custom.datalist.HtmlDataList,Id: typeDonnees][Class: javax.faces.component.html.HtmlOutputText,Id: j_id112]}
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:627)
	at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:522)
	at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:499)
	at org.apache.myfaces.custom.datalist.HtmlListRenderer.encodeChildren(HtmlListRenderer.java:178)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:611)
	at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:516)
	at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:499)
	at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:520)
	at org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.renderColumnBody(HtmlTableRenderer.java:731)
	at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBase.encodeColumnChild(HtmlTableRendererBase.java:349)
	at org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.encodeColumnChild(HtmlTableRenderer.java:615)
	at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBase.encodeInnerHtml(HtmlTableRendererBase.java:325)
	at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBase.encodeChildren(HtmlTableRendererBase.java:144)
	at org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.encodeChildren(HtmlTableRenderer.java:280)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:611)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:250)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:257)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:257)
	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
	at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:155)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:246)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at fr.ca.sa.es.web.filtre.RecosFacesFiltre.doFilter(RecosFacesFiltre.java:56)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at fr.ca.sa.es.web.util.context.ContextFilter.doFilter(ContextFilter.java:199)
	at fr.ca.sa.es.web.util.context.ContextFilter.doFilter(ContextFilter.java:66)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:246)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	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:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:619)
Caused by: javax.faces.FacesException: Could not retrieve value of component with path : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /user/profilDetail.jsp][Class: javax.faces.component.html.HtmlForm,Id: referentiel][Class: org.apache.myfaces.component.html.ext.HtmlDataTable,Id: profilLines][Class: org.apache.myfaces.custom.column.HtmlSimpleColumn,Id: j_id110][Class: org.apache.myfaces.custom.datalist.HtmlDataList,Id: typeDonnees][Class: javax.faces.component.html.HtmlOutputText,Id: j_id112]}
	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getValue(RendererUtils.java:331)
	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getStringValue(RendererUtils.java:279)
	at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.renderOutput(HtmlTextRendererBase.java:74)
	at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.encodeEnd(HtmlTextRendererBase.java:61)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:624)
	... 60 more
Caused by: javax.el.ELException: /user/profilDetail.jsp @252,91 value="#{referentielLabels[montag:concat('profil.typeDonnee.', typeDonnee)]}": Function 'montag:concat' not found
	at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:76)
	at javax.faces.component.UIOutput.getValue(UIOutput.java:73)
	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getValue(RendererUtils.java:327)
	... 64 more
Il me semble que cela provient du fait que pour la migration nous avons du utiliser la librairie el-ri de JBoss, mais je ne sais pas trop comment résoudre le problème. Quelqu'un aurait t-il déjà été confronté à ce problème, et si oui comment l'a t-il résolue.

Merci !