myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Marinschek (JIRA)" <...@myfaces.apache.org>
Subject [jira] Commented: (MYFACES-796) Problem with Date Conversion with 1.1.1 release
Date Tue, 06 Dec 2005 13:14:08 GMT
    [ http://issues.apache.org/jira/browse/MYFACES-796?page=comments#action_12359419 ] 

Martin Marinschek commented on MYFACES-796:
-------------------------------------------

Hi Rogerio,

this is a problem that has been discussed much on the mailing list. Baseline: the coercion
was not spec compliant, we had to move it out. You have to make sure that you give out the
correct type in your date-converter, especially not to deliver back a string.

regards,

Martin

> Problem with Date Conversion with 1.1.1 release
> -----------------------------------------------
>
>          Key: MYFACES-796
>          URL: http://issues.apache.org/jira/browse/MYFACES-796
>      Project: MyFaces
>         Type: Bug
>   Components: Implementation, General
>     Versions: 1.1.1, 1.1.2
>  Environment: Windows XP SP2 Tomcat 5.5.9 MyFaces 1.1.1
>     Reporter: Rogerio Saulo
>     Priority: Critical
>      Fix For: Nightly

>
> When I upgrade from 1.1.0 to 1.1.1 my custom date converter stop working.
> In my page when the user does not fill the date field, that is not required myfaces report
the following error, the field in backing bean is of type java.util.Date.
> Looking the source, I see the problem in class org.apache.myfaces.el.ValueBindingImpl
, before 1.1.1, in the setValue(FacesContext facesContext, Object newValue) method, the call
to the propertyResolver.setValue is in this way :
>                     Class clazz = propertyResolver.getType(base, property);
>                     propertyResolver.setValue(base, property, coerce(newValue, clazz));
> In the 1.1.1, this has changed to :
>                    propertyResolver.setValue(base, property, newValue);
> This change is causing the error.
> Follow my code that reproduces the error.
>  
> The Bean :
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>  
> public class UserSearchBean extends BaseSearchBean {
>  
>  private Integer id_user;
>  private String email;
>  private String login;
>  private String name;
>  private Date creation_timestamp1;
>  
>  public Date getCreation_timestamp1() {
>   return creation_timestamp1;
>  }
>  public void setCreation_timestamp1(Date creation_timestamp1) {
>   this.creation_timestamp1 = creation_timestamp1;
>  }
> ...
>  
> The Page :
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> <h:inputText id="txtDateCreation" value="#{UserSearchBean.creation_timestamp1}" maxlength="10"
size="9" styleClass="input">
> <venus:dateTimeConverter pattern="DD/MM/YYYY" />
> </h:inputText>
> The Converter :
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>  public Object getAsObject(FacesContext context, UIComponent component, String newValue)
>    throws ConverterException {
>   
>   Date convertedValue = null;
>   
>   boolean valid = false;
>   if ( newValue == null || newValue.equals("") ) {
>    return newValue;
>   }  
>   SimpleDateFormat fmt = new SimpleDateFormat(pattern);
>   fmt.setLenient(false);
>   
>   try {
>    
>    convertedValue = fmt.parse(newValue);
>    valid = true;
>    
>   } catch (ParseException e) {
>   
>    valid = false;
>   }
>   
>   if ( !valid ) {
>    FacesMessage errMsg = MessageFactory.getMessage(context, DATETIME_FORMAT_INVALID_MESSAGE_ID,

>     (new Object[] {newValue}));
>    throw new ConverterException(errMsg);
>   }
>   
>   return convertedValue;
>   
>  }
> The Error :
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>  
>  
> [2005-11-07 09:29:16,546] http-8080-Processor24 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/venusweb]
ERROR - Cannot set value for expression '#{UserSearchBean.creation_timestamp1}' to a new value
of type java.lang.String
> javax.faces.el.EvaluationException: Cannot set value for expression '#{UserSearchBean.creation_timestamp1}'
to a new value of type java.lang.String
> at org.apache.myfaces.el.ValueBindingImpl.setValue(ValueBindingImpl.java:304)
> at javax.faces.component.UIInput.updateModel(UIInput.java:226)
> at javax.faces.component.UIInput.processUpdates(UIInput.java:165)
> at javax.faces.component.UIForm.processUpdates(UIForm.java:85)
> at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:428)
> at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:153)
> at org.apache.myfaces.lifecycle.LifecycleImpl.updateModelValues(LifecycleImpl.java:277)
> at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:81)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:106)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> at br.com.venus.view.filters.SecurityFilter.doFilter(SecurityFilter.java:61)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> at org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
> at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
> at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
> at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
> at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
> at java.lang.Thread.run(Thread.java:595)
> Caused by: javax.faces.el.EvaluationException: br.com.venus.model.bean.search.UserSearchBean
> at org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:155)
> at org.apache.myfaces.el.ValueBindingImpl.setValue(ValueBindingImpl.java:269)
> ... 32 more
> Caused by: javax.faces.el.EvaluationException: Bean: br.com.venus.model.bean.search.UserSearchBean,
property: creation_timestamp1
> at org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:372)
> at org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:148)
> ... 33 more
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:368)
> ... 34 more
> But I do not see this behavior with all prior version.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message