Bonjour,

Pour résumer mon problème, j'ai mes <t:message> qui "explosent"
Je travaille avec MyFaces1.1.1 et Tomahawk1.1.1
Voici le code fautif :
Ma 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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"
    errorPage="presentation/error.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
 
<html>
	<%@include file="./inc/head.inc"%>
 
<body>
 
<f:view>
	<h:form id="FormAttributs">
		<h:panelGrid 
			id="GrilleAttributs"
			columns="2" 
			styleClass="cssFormulaireFond"
			width="100%">
			<h:outputLabel for="nomIdForm" value="Nom"/>
			<h:inputText 
               	maxlength="50"
               	size="25"
                styleClass="cssInputText"
                readonly="false"
				id="nomIdForm"
               	value="#{beanPersonne.personneCourante.nom}"
               	required="true"/>
            <h:outputLabel value=""/>
        	<t:message for="nomIdForm" styleClass="cssTexteRouge" showDetail="true" showSummary="true"/>
        </h:panelGrid>
        <h:commandButton 
			action="#{beanPersonne.valider}"
			value="Valider"
			styleClass="cssBoutonMilieuActif"
			rendered="true"/>					
	</h:form>
</f:view>
 
</body>
</html>
Mon bean :
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
package test.backing;
 
import test.objet.PersonneValeur;
 
public class TestPersonne {
 
	private PersonneValeur personneCourante;
 
	public PersonneValeur getPersonneCourante() {
		if (personneCourante == null) {
			personneCourante = new PersonneValeur();
		}
		return personneCourante;
	}
 
	public void setPersonneCourante(PersonneValeur personne) {
		personneCourante = personne;
	}
 
	public String valider() {
		return "OK";
	}
}
Mon web.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
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
<?xml version="1.0"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>TEST</display-name>
<!-- Context -->
	<context-param>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>server</param-value>
	</context-param>
	<context-param>
		<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
		<param-value>true</param-value>
	</context-param>
	<context-param>
		<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
		<param-value>false</param-value>
	</context-param>
	<context-param>
		<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
		<param-value>false</param-value>
	</context-param>
	<context-param>
		<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
		<param-value>true</param-value>
	</context-param>
<!-- Filter -->
	<filter>
		<filter-name>extensionsFilter</filter-name>
		<filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class>
		<init-param>
			<param-name>uploadMaxFileSize</param-name>
			<param-value>100m</param-value>
		</init-param>
		<init-param>
			<param-name>uploadThresholdSize</param-name>
			<param-value>100k</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<url-pattern>*.jsf</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<url-pattern>/faces/*</url-pattern>
	</filter-mapping>
	<listener>
		<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
	</listener>
<!-- Servlet -->
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>
<!-- Login -->
	<login-config>
		<auth-method>BASIC</auth-method>
	</login-config>
</web-app>
Donc dans ma JSP, j'ai un champ obligatoire "Nom" (d'ailleurs il n'y a que celui là ). Et si je ne le remplis pas et que j'appuie sur valider, je m'attend à ce que le <t:message> en dessous m'affiche une erreur. Au lieu de ça, j'ai l'exception suivante :
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
cause mère
 
java.lang.NullPointerException: expr
	javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:210)
	org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:200)
	org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:214)
	org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.createOutputLabelMap(HtmlMessageRenderer.java:214)
	org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.getOutputLabelMap(HtmlMessageRenderer.java:184)
	org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.findInputLabel(HtmlMessageRenderer.java:128)
	org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.getSummary(HtmlMessageRenderer.java:66)
	org.apache.myfaces.renderkit.html.HtmlMessageRendererBase.renderSingleFacesMessage(HtmlMessageRendererBase.java:101)
	org.apache.myfaces.renderkit.html.HtmlMessageRendererBase.renderMessage(HtmlMessageRendererBase.java:85)
	org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.encodeEnd(HtmlMessageRenderer.java:54)
	javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:331)
	org.apache.myfaces.renderkit.RendererUtils.renderChild(RendererUtils.java:450)
	org.apache.myfaces.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:203)
	org.apache.myfaces.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:85)
	javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:331)
	javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:349)
	javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:253)
	org.apache.myfaces.taglib.UIComponentBodyTagBase.doEndTag(UIComponentBodyTagBase.java:55)
	org.apache.jsp.test_jsp._jspx_meth_h_005fpanelGrid_005f0(test_jsp.java:268)
	org.apache.jsp.test_jsp._jspx_meth_h_005fform_005f0(test_jsp.java:205)
	org.apache.jsp.test_jsp._jspx_meth_f_005fview_005f0(test_jsp.java:172)
	org.apache.jsp.test_jsp._jspService(test_jsp.java:135)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415)
	org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
	org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:352)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:107)
	org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
Quelques petits test (qui montrent que c'est bien le t:message) :
- si on me required="false" -> OK pas d'exception
- si on enlève la ligne <t:message[...]> -> pas d'exception
- si je met un validateur qui renvoie un message d'erreur (exception)

Je ne sais plus quoi testé...

Si vous avez une idée, n'hésitez pas !!!

Merci