[jboss-user] [JBoss Seam] - Does facesMessages.clear() work for conversion errors?

supernovasoftware.com do-not-reply at jboss.com
Fri Jan 4 19:31:41 EST 2008


Using Seam 2.0 on 4.2.2

I have a converter that I use for a datatable with dropdown filters and a button to update multiple values at once.

Each row has a single input box that should only accept positive doubles.  When a dropdown changes I use a4j:support to rerender the entire datatable.

The update button also rerenders the datatable.

If I 

throw new ConverterException(new FacesMessage("You must enter a positive number."));

The table is reloaded and the FacesMessages are correctly attached to the correct input components, but all values are reverted to their initial value and any changes are lost even if that field passes conversion.  

If I
throw new ConverterException("You must enter a positive number.");

and then I change the filter and reload the datatable, both the value and the error message are carried with that row.  The rest of the columns contain the correct data.  I have to select a filter that has no results or less rows than where the conversion error occurs to clear it.  Also the error message is not reflected and the error reads "value could not be converted to the expected type."

	facesMessages.clear(); 

seemed to work when I was adding them in a validator
  private void addMessage(UIComponent component, Object value)
  |   {
  | 	HtmlInputText htmlInputText = (HtmlInputText) component;
  | 	htmlInputText.setValid(false);
  |     facesMessages.addToControl(htmlInputText.getId(), new FacesMessage("Must be >= 0."));
  |   }
, but not when the converter adds them.

1.  How can I clear the conversion errors when I change the filter?
2.  Or, how can I throw the error with the FacesMessage and have the values perserverd?

Complete converter code

  | @Name("positiveDoubleConverter")
  | @BypassInterceptors
  | @Converter
  | public class PositiveDoubleConverter implements javax.faces.convert.Converter
  | {
  |   public PositiveDoubleConverter() { }
  | 
  |   public String getAsString(FacesContext context, UIComponent component, Object value)
  |   {
  |     return (value==null) ? null : value.toString();
  |   }
  | 
  |   public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException
  |   {
  | 	if(value==null || value.length()<1) return null;
  |     try {
  |     	Double d = Double.parseDouble(value);
  |     	if(d<0) 
  |     	{
  |     	  throwConverterException();
  |     	}    		
  |     	return d;
  | 	} catch (NumberFormatException e) {
  | 		return throwConverterException();
  | 	}
  |   }
  |   
  |   private Object throwConverterException() throws ConverterException
  |   {
  | 	  //throw new ConverterException(new FacesMessage("You must enter a positive number."));  
  | 	  throw new ConverterException("You must enter a positive number.");
  |   }
  | 
  | }





View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4117233#4117233

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4117233



More information about the jboss-user mailing list