Caros colegas,
Estou tentanto utilizar uma messagem personalizada para informar ao usuário um erro na inserção de uma data em um formulário. Contudo a mensagem personalizada não aparece!
Tenho os seguintes arquivos em minha aplicação web:
index.jsp:<html>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<f:loadBundle basename="com.corejsf.messages" var="msgs"/>
<head>
<link href="styles.css" rel="stylesheet" type="text/css"/>
<title>
<h:outputText value="#{msgs.title}"/>
</title>
</head>
<body>
<h:form>
<h1><h:outputText value="#{msgs.paymentInformation}"/></h1>
<h:panelGrid columns="3">
<h:outputText value="#{msgs.amount}"/>
<h:inputText id="amount" label="#{msgs.amount}"
value="#{payment.amount}">
<f:convertNumber minFractionDigits="2"/>
</h:inputText>
<h:message for="amount" styleClass="errorMessage"/>
<h:outputText value="#{msgs.creditCard}"/>
<h:inputText id="card" label="#{msgs.creditCard}"
value="#{payment.card}"/>
<h:panelGroup/>
<h:outputText value="#{msgs.expirationDate}"/>
<h:inputText id="date" label="#{msgs.expirationDate}"
value="#{payment.date}">
<f:convertDateTime pattern="MM/yyyy"/>
</h:inputText>
<h:message for="date" styleClass="errorMessage"/>
</h:panelGrid>
<h:commandButton value="#{msgs.process}" action="process"/>
</h:form>
</body>
</f:view>
</html>
package com.corejsf;
import java.util.Date;
public class PaymentBean {
private double amount;
private String card = "";
private Date date = new Date();
public double getAmount() { return amount; }
public void setAmount(double amount) { this.amount = amount; }
public String getCard() { return card; }
public void setCard(String card) { this.card = card; }
public Date getDate() { return date; }
public void setDate(Date date) { this.date = date; }
}
<?xml version="1.0"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>process</from-outcome>
<to-view-id>/result.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/result.jsp</from-view-id>
<navigation-case>
<from-outcome>back</from-outcome>
<to-view-id>/index.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>payment</managed-bean-name>
<managed-bean-class>com.corejsf.PaymentBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<application>
<resource-bundle>
<base-name>com.corejsf.messages</base-name>
<var>msgs</var>
</resource-bundle>
</application>
</faces-config>
title=Uma aplicação para testar conversão de dados
enterPayment=Entre com as informações sobre o pagamento
amount=Valor
creditCard=Cartão de Crédito
expirationDate=Data de validade (Mês/Ano)
process=Processar
paymentInformation=Informação do pagamento
javax.faces.component.UIInput.CONVERSION=Formato Inválido
javax.faces.component.UIInput.CONVERSION_detail=Formato Inválido(detalhe)
Quando eu digito, por exemplo, "01" (sem aspas, é claro) no campo "Data de validade (Mês/ano)" e clico no botão processar ele apresenta a seguinte mensagem:
Data de validade (Mês/Ano): '01' não pode ser interpretado como data. Exemplo: 01/2010
Acredito eu, que essa seja uma mensagem padrão do JSF. Mesmo no bundle tendo sido setada a mensagem "Formato inválido". Sabendo q a tag message exibe, por default, o detalhamente e não exibe o resumo, criei, para testar uma propriedade "_detail" (como mostrado no messages.properties acima) e nem assim a messagem personalizada não aparece. Seria pq falta algo no index.jsp para indicar q ele deve buscar a propriedade "javax.faces.component.UIInput.CONVERSION=Formato Inválido" no bundle?!?!
Desde já agradeço a atenção!