dev@javaserverfaces.java.net

[REVIEW] Add Component Label to Component Message(s)

From: Roger Kitain <Roger.Kitain_at_Sun.COM>
Date: Sun, 06 Mar 2005 20:30:44 -0500

Summary:
    - Related to:
https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=6

M jsf-api/src/javax/faces/component/UIInput.java
M jsf-api/src/javax/faces/component/UISelectMany.java
M jsf-api/src/javax/faces/component/UISelectOne.java
---- add component label to component level error messages
M jsf-api/test/javax/faces/Messages.properties
---- updated for api tests
M jsf-api/test/javax/faces/component/UIInputTestCase.java
M jsf-api/test/javax/faces/component/UISelectManyTestCase.java
M jsf-api/test/javax/faces/component/UISelectOneTestCase.java
---- modified tests to check for label in message
M jsf-ri/src/javax/faces/Messages.properties
M jsf-ri/src/javax/faces/Messages_de.properties
M jsf-ri/src/javax/faces/Messages_es.properties
M jsf-ri/src/javax/faces/Messages_fr.properties
---- add placeholder for component label in component level messages.




<< ADD DESCRIPTION HERE >>


SECTION: Modified Files
----------------------------
M jsf-api/src/javax/faces/component/UIInput.java
M jsf-api/src/javax/faces/component/UISelectMany.java
M jsf-api/src/javax/faces/component/UISelectOne.java
M jsf-api/test/javax/faces/Messages.properties
M jsf-api/test/javax/faces/component/UIInputTestCase.java
M jsf-api/test/javax/faces/component/UISelectManyTestCase.java
M jsf-api/test/javax/faces/component/UISelectOneTestCase.java
M jsf-ri/src/javax/faces/Messages.properties
M jsf-ri/src/javax/faces/Messages_de.properties
M jsf-ri/src/javax/faces/Messages_es.properties
M jsf-ri/src/javax/faces/Messages_fr.properties


SECTION: Diffs
----------------------------
Index: jsf-api/src/javax/faces/component/UIInput.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/src/javax/faces/component/UIInput.java,v
retrieving revision 1.75
diff -u -r1.75 UIInput.java
--- jsf-api/src/javax/faces/component/UIInput.java 17 Jun 2004 16:50:35 -0000 1.75
+++ jsf-api/src/javax/faces/component/UIInput.java 7 Mar 2005 01:18:28 -0000
@@ -550,7 +550,9 @@
                 FacesMessage message = null;
                 if (null == messageStr) {
                     message =
- MessageFactory.getMessage(context, CONVERSION_MESSAGE_ID);
+ MessageFactory.getMessage(context, CONVERSION_MESSAGE_ID,
+ new Object[] {MessageFactory.getLabel(
+ context, this)});
                 }
                 else {
                     message = new FacesMessage(messageStr);
@@ -561,19 +563,25 @@
             }
             catch (FacesException e) {
                 FacesMessage message =
- MessageFactory.getMessage(context, CONVERSION_MESSAGE_ID);
+ MessageFactory.getMessage(context, CONVERSION_MESSAGE_ID,
+ new Object[] {MessageFactory.getLabel(
+ context, this)});
                 message.setSeverity(FacesMessage.SEVERITY_ERROR);
                 context.addMessage(getClientId(context), message);
                 setValid(false);
             } catch (IllegalArgumentException e) {
                 FacesMessage message =
- MessageFactory.getMessage(context, CONVERSION_MESSAGE_ID);
+ MessageFactory.getMessage(context, CONVERSION_MESSAGE_ID,
+ new Object[] {MessageFactory.getLabel(
+ context, this)});
                 message.setSeverity(FacesMessage.SEVERITY_ERROR);
                 context.addMessage(getClientId(context), message);
                 setValid(false);
             } catch (Exception e) {
                 FacesMessage message =
- MessageFactory.getMessage(context, CONVERSION_MESSAGE_ID);
+ MessageFactory.getMessage(context, CONVERSION_MESSAGE_ID,
+ new Object[] {MessageFactory.getLabel(
+ context, this)});
                 message.setSeverity(FacesMessage.SEVERITY_ERROR);
                 context.addMessage(getClientId(context), message);
                 setValid(false);
@@ -765,7 +773,9 @@
         // If our value is valid, enforce the required property if present
         if (isValid() && isRequired() && isEmpty(newValue)) {
             FacesMessage message =
- MessageFactory.getMessage(context, REQUIRED_MESSAGE_ID);
+ MessageFactory.getMessage(context, REQUIRED_MESSAGE_ID,
+ new Object[] {MessageFactory.getLabel(
+ context, this)});
             message.setSeverity(FacesMessage.SEVERITY_ERROR);
             context.addMessage(getClientId(context), message);
             setValid(false);
@@ -1082,8 +1092,8 @@
             ConverterException ce, Object value) {
         FacesMessage message = ce.getFacesMessage();
         if (message == null) {
- message = MessageFactory.getMessage(context,
- CONVERSION_MESSAGE_ID);
+ message = MessageFactory.getMessage(context, CONVERSION_MESSAGE_ID,
+ new Object[] {MessageFactory.getLabel(context, this)});
             if (message.getDetail() == null) {
                 message.setDetail(ce.getMessage());
             }
Index: jsf-api/src/javax/faces/component/UISelectMany.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/src/javax/faces/component/UISelectMany.java,v
retrieving revision 1.52
diff -u -r1.52 UISelectMany.java
--- jsf-api/src/javax/faces/component/UISelectMany.java 20 Apr 2004 02:03:21 -0000 1.52
+++ jsf-api/src/javax/faces/component/UISelectMany.java 7 Mar 2005 01:18:28 -0000
@@ -376,7 +376,8 @@
         // Enqueue an error message if an invalid value was specified
         if (!found) {
             FacesMessage message =
- MessageFactory.getMessage(context, INVALID_MESSAGE_ID);
+ MessageFactory.getMessage(context, INVALID_MESSAGE_ID,
+ new Object[] {MessageFactory.getLabel(context, this)});
             message.setSeverity(FacesMessage.SEVERITY_ERROR);
             context.addMessage(getClientId(context), message);
             setValid(false);
Index: jsf-api/src/javax/faces/component/UISelectOne.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/src/javax/faces/component/UISelectOne.java,v
retrieving revision 1.45
diff -u -r1.45 UISelectOne.java
--- jsf-api/src/javax/faces/component/UISelectOne.java 20 Apr 2004 02:03:58 -0000 1.45
+++ jsf-api/src/javax/faces/component/UISelectOne.java 7 Mar 2005 01:18:28 -0000
@@ -116,7 +116,8 @@
         // Enqueue an error message if an invalid value was specified
         if (!found) {
             FacesMessage message =
- MessageFactory.getMessage(context, INVALID_MESSAGE_ID);
+ MessageFactory.getMessage(context, INVALID_MESSAGE_ID,
+ new Object[] {MessageFactory.getLabel(context, this)});
             message.setSeverity(FacesMessage.SEVERITY_ERROR);
             context.addMessage(getClientId(context), message);
             setValid(false);
Index: jsf-api/test/javax/faces/Messages.properties
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/test/javax/faces/Messages.properties,v
retrieving revision 1.4
diff -u -r1.4 Messages.properties
--- jsf-api/test/javax/faces/Messages.properties 5 Feb 2004 05:04:14 -0000 1.4
+++ jsf-api/test/javax/faces/Messages.properties 7 Mar 2005 01:18:28 -0000
@@ -45,10 +45,10 @@
 javax.faces.validator.LengthValidator.LIMIT=Validation Error: Specified attribute cannot be converted to proper type.
 javax.faces.validator.LengthValidator.MAXIMUM=Validation Error: Value is greater than allowable maximum of ''{0}''.
 javax.faces.validator.LengthValidator.MINIMUM=Validation Error: Value is less than allowable minimum of ''{0}''.
-javax.faces.component.UIInput.CONVERSION=Conversion error during model data update
-javax.faces.component.UIInput.REQUIRED=Validation Error: Value is required.
-javax.faces.component.UISelectOne.INVALID=Validation Error: Value is not valid.
-javax.faces.component.UISelectMany.INVALID=Validation Error: Value is not valid.
+javax.faces.component.UIInput.CONVERSION={0}: Conversion error during model data update
+javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
+javax.faces.component.UISelectOne.INVALID={0}: Validation Error: Value is not valid.
+javax.faces.component.UISelectMany.INVALID={0}: Validation Error: Value is not valid.
 javax.faces.validator.RequiredValidator.FAILED=Validation Error: Value is required.
 javax.faces.validator.LongRangeValidator.LIMIT=Validation Error: Specified attribute cannot be converted to proper type.
 javax.faces.validator.LongRangeValidator.MAXIMUM=Validation Error: Value is greater than allowable maximum of ''{0}''.
Index: jsf-api/test/javax/faces/component/UIInputTestCase.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/test/javax/faces/component/UIInputTestCase.java,v
retrieving revision 1.34
diff -u -r1.34 UIInputTestCase.java
--- jsf-api/test/javax/faces/component/UIInputTestCase.java 7 Apr 2004 17:39:26 -0000 1.34
+++ jsf-api/test/javax/faces/component/UIInputTestCase.java 7 Mar 2005 01:18:29 -0000
@@ -408,11 +408,18 @@
         checkMessages(0);
         assertTrue(input.isValid());
 
+ input.getAttributes().put("label", "mylabel");
         input.setValid(true);
         input.setSubmittedValue("");
         input.validate(facesContext);
         checkMessages(1);
         assertTrue(!input.isValid());
+
+ Iterator messages = facesContext.getMessages();
+ while (messages.hasNext()) {
+ FacesMessage message = (FacesMessage) messages.next();
+ assertTrue(message.getSummary().indexOf("mylabel") >= 0);
+ }
         
         input.setValid(true);
         input.setSubmittedValue(null);
Index: jsf-api/test/javax/faces/component/UISelectManyTestCase.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/test/javax/faces/component/UISelectManyTestCase.java,v
retrieving revision 1.27
diff -u -r1.27 UISelectManyTestCase.java
--- jsf-api/test/javax/faces/component/UISelectManyTestCase.java 12 Jul 2004 14:26:05 -0000 1.27
+++ jsf-api/test/javax/faces/component/UISelectManyTestCase.java 7 Mar 2005 01:18:29 -0000
@@ -13,12 +13,14 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
+import javax.faces.application.FacesMessage;
 import javax.faces.el.ValueBinding;
 import javax.faces.model.SelectItem;
 import javax.faces.model.SelectItemGroup;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -185,11 +187,19 @@
         assertTrue(selectMany.isValid());
 
         // Validate one value on the list and one not on the list
+ selectMany.getAttributes().put("label", "mylabel");
         selectMany.setValid(true);
         selectMany.setSubmittedValue(new Object[] { "bar", "bop"});
         selectMany.setRendererType(null); // We don't have any renderers
         selectMany.validate(facesContext);
         assertTrue(!selectMany.isValid());
+
+ Iterator messages = facesContext.getMessages();
+ while (messages.hasNext()) {
+ FacesMessage message = (FacesMessage) messages.next();
+ assertTrue(message.getSummary().indexOf("mylabel") >= 0);
+ }
+
 
     }
 
Index: jsf-api/test/javax/faces/component/UISelectOneTestCase.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-api/test/javax/faces/component/UISelectOneTestCase.java,v
retrieving revision 1.23
diff -u -r1.23 UISelectOneTestCase.java
--- jsf-api/test/javax/faces/component/UISelectOneTestCase.java 12 Jul 2004 14:26:05 -0000 1.23
+++ jsf-api/test/javax/faces/component/UISelectOneTestCase.java 7 Mar 2005 01:18:29 -0000
@@ -13,11 +13,13 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
+import javax.faces.application.FacesMessage;
 import javax.faces.model.SelectItem;
 import javax.faces.model.SelectItemGroup;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -117,11 +119,16 @@
         assertTrue(selectOne.isValid());
 
         // Validate a value that is not on the list
+ selectOne.getAttributes().put("label", "mylabel");
         selectOne.setValid(true);
         selectOne.setSubmittedValue("bop");
         selectOne.validate(facesContext);
         assertTrue(!selectOne.isValid());
-
+ Iterator messages = facesContext.getMessages();
+ while (messages.hasNext()) {
+ FacesMessage message = (FacesMessage) messages.next();
+ assertTrue(message.getSummary().indexOf("mylabel") >= 0);
+ }
     }
 
     // Test validation of component with UISelectItems pointing to map
Index: jsf-ri/src/javax/faces/Messages.properties
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/javax/faces/Messages.properties,v
retrieving revision 1.22
diff -u -r1.22 Messages.properties
--- jsf-ri/src/javax/faces/Messages.properties 24 Feb 2005 15:22:34 -0000 1.22
+++ jsf-ri/src/javax/faces/Messages.properties 7 Mar 2005 01:18:31 -0000
@@ -46,10 +46,10 @@
 # Component Errors
 # ==============================================================================
 
-javax.faces.component.UIInput.CONVERSION=Conversion error occurred.
-javax.faces.component.UIInput.REQUIRED=Validation Error: Value is required.
-javax.faces.component.UISelectOne.INVALID=Validation Error: Value is not valid
-javax.faces.component.UISelectMany.INVALID=Validation Error: Value is not valid
+javax.faces.component.UIInput.CONVERSION={0}: Conversion error occurred.
+javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
+javax.faces.component.UISelectOne.INVALID={0}: Validation Error: Value is not valid
+javax.faces.component.UISelectMany.INVALID={0}: Validation Error: Value is not valid
 
 # ==============================================================================
 # Converter Errors
Index: jsf-ri/src/javax/faces/Messages_de.properties
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/javax/faces/Messages_de.properties,v
retrieving revision 1.21
diff -u -r1.21 Messages_de.properties
--- jsf-ri/src/javax/faces/Messages_de.properties 24 Feb 2005 15:22:34 -0000 1.21
+++ jsf-ri/src/javax/faces/Messages_de.properties 7 Mar 2005 01:18:32 -0000
@@ -85,9 +85,9 @@
 javax.faces.validator.LengthValidator.LIMIT=Validierungs-Fehler: Spezifiziertes Attribut kann nicht in korrekten Typ umgewandelt werden.
 javax.faces.validator.LengthValidator.MAXIMUM={1}: Validierungs-Fehler: Wert ist gr\u00F6\u00DFer als zul\u00E4ssiges Maximum ''{0}''.
 javax.faces.validator.LengthValidator.MINIMUM={1}: Validierungs-Fehler: Wert ist kleiner als zul\u00E4ssiges Minimum ''{0}''.
-javax.faces.component.UIInput.REQUIRED=Validierungs-Fehler: Wert wird ben\u00F6tigt.
-javax.faces.component.UISelectOne.INVALID=Validierungs-Fehler: Wert nicht g\u00F6ltig.
-javax.faces.component.UISelectMany.INVALID=Validierungs-Fehler: Wert nicht g\u00F6ltig.
+javax.faces.component.UIInput.REQUIRED={0}: Validierungs-Fehler: Wert wird ben\u00F6tigt.
+javax.faces.component.UISelectOne.INVALID={0}: Validierungs-Fehler: Wert nicht g\u00F6ltig.
+javax.faces.component.UISelectMany.INVALID={0}: Validierungs-Fehler: Wert nicht g\u00F6ltig.
 javax.faces.validator.RequiredValidator.FAILED=Validierungs-Fehler: Wert wird ben\u00F6tigt.
 javax.faces.validator.LongRangeValidator.LIMIT=Validierungs-Fehler: Spezifiziertes Attribut kann nicht in korrekten Typ umgewandelt werden.
 javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Validierungs-Fehler: Wert ist gr\u00F6\u00DFer als zul\u00E4ssiges Maximum ''{0}''.
Index: jsf-ri/src/javax/faces/Messages_es.properties
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/javax/faces/Messages_es.properties,v
retrieving revision 1.21
diff -u -r1.21 Messages_es.properties
--- jsf-ri/src/javax/faces/Messages_es.properties 24 Feb 2005 15:22:34 -0000 1.21
+++ jsf-ri/src/javax/faces/Messages_es.properties 7 Mar 2005 01:18:32 -0000
@@ -85,9 +85,9 @@
 javax.faces.validator.LengthValidator.LIMIT=Error de Validaci\u00f3n: No puede ser convertido specificado atributo al proprio tipo.
 javax.faces.validator.LengthValidator.MAXIMUM={1}: Error de Validaci\u00F3n: Valor es m\u00E1s grande de valor de m\u00E1ximo permitido: ''{0}''.
 javax.faces.validator.LengthValidator.MINIMUM={1}: Error de Validaci\u00F3n: Valor is menos de valor de m\u00EDnimo permitido: ''{0}''.
-javax.faces.component.UIInput.REQUIRED=Error de Validaci\u00F3n: Valor es necesario.
-javax.faces.component.UISelectOne.INVALID=Error de Validaci\u00F3n: Valor no es correcto.
-javax.faces.component.UISelectMany.INVALID=Error de Validaci\u00F3n: Valor no es correcto.
+javax.faces.component.UIInput.REQUIRED={0}: Error de Validaci\u00F3n: Valor es necesario.
+javax.faces.component.UISelectOne.INVALID={0}: Error de Validaci\u00F3n: Valor no es correcto.
+javax.faces.component.UISelectMany.INVALID={0}: Error de Validaci\u00F3n: Valor no es correcto.
 javax.faces.validator.RequiredValidator.FAILED=Error de Validaci\u00f3n: Valor es necesario.
 javax.faces.validator.LongRangeValidator.LIMIT=Error de Validaci\u00f3n: No puede ser convertido specificado atributo al proprio tipo.
 javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Error de Validaci\u00F3n: Valor es m\u00E1s grande de valor de m\u00E1ximo permitido: ''{0}''.
Index: jsf-ri/src/javax/faces/Messages_fr.properties
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/javax/faces/Messages_fr.properties,v
retrieving revision 1.20
diff -u -r1.20 Messages_fr.properties
--- jsf-ri/src/javax/faces/Messages_fr.properties 24 Feb 2005 15:22:34 -0000 1.20
+++ jsf-ri/src/javax/faces/Messages_fr.properties 7 Mar 2005 01:18:32 -0000
@@ -84,9 +84,9 @@
 javax.faces.validator.LengthValidator.LIMIT=Erreur de validation: Attribut sp\u00e9cifi\u00e9 ne peut etre converti \u00b4 un type appropri\u00e9.
 javax.faces.validator.LengthValidator.MAXIMUM={1}: Erreur de validation\: La valeur sp\u00E9cifi\u00E9e est sup\u00E9rieure \u00B4 la valeur maximale permise ''{0}''.
 javax.faces.validator.LengthValidator.MINIMUM={1}: Erreur de validation\: La valeur sp\u00E9cifi\u00E9e est inf\u00E9rieure \u00B4 la valeur minimale permise ''{0}''.
-javax.faces.component.UIInput.REQUIRED=Erreur de validation\: Valeur requise.
-javax.faces.component.UISelectOne.INVALID=Erreur de validation\: Valeur not valid.
-javax.faces.component.UISelectMany.INVALID=Erreur de validation\: Valeur not valid.
+javax.faces.component.UIInput.REQUIRED={0}: Erreur de validation\: Valeur requise.
+javax.faces.component.UISelectOne.INVALID={0}: Erreur de validation\: Valeur not valid.
+javax.faces.component.UISelectMany.INVALID={0}: Erreur de validation\: Valeur not valid.
 javax.faces.validator.RequiredValidator.FAILED=Erreur de validation: Valeur requise.
 javax.faces.validator.LongRangeValidator.LIMIT=Erreur de validation: Attribut sp\u00e9cifi\u00e9 ne peut etre converti \u00b4 un type appropri\u00e9
 javax.faces.validator.LongRangeValidator.MAXIMUM={1}: Erreur de validation\: La valeur sp\u00E9cifi\u00E9e est sup\u00E9rieure \u00B4 la valeur maximale permise ''{0}''.