Exception lors des <t:message>
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:
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:
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:
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:
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 :)