myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jakob Korherr (JIRA)" <...@myfaces.apache.org>
Subject [jira] Commented: (MYFACES-2583) f:ajax cannot retrieve clientId from component
Date Tue, 02 Mar 2010 21:39:27 GMT

    [ https://issues.apache.org/jira/browse/MYFACES-2583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12840336#action_12840336
] 

Jakob Korherr commented on MYFACES-2583:
----------------------------------------

After digging into this problem I realized that this seems to be a different problem. The
problem is that the ValueExpression (in our case for the attribute render, but in the code
also for execute) is evaluated when the component tree is built, which is completely wrong,
because this prohibits the real usage of ValueExpressions: changing values!

In your case, Ganesh, the real problem is that at the time the ValueExpression is evaluated,
the component is not yet bound to the property in the managed bean and thus the ValueExpression
resolves to null and thus the String is not "parsed" into a Collection at that time. Then,
when the render attribute is evaluated, the ValueExpression resolves to the clientId, which
is of course a String, but the runtime expects a (pre-processed) Collection. Thus the ClassCastException.

> f:ajax cannot retrieve clientId from component
> ----------------------------------------------
>
>                 Key: MYFACES-2583
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2583
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.0.0-beta-2
>         Environment: JSF
>            Reporter: Ganesh Jung
>         Attachments: MyFaces_Test.war
>
>
> This code:
> 		<h:form id="myForm">
> 	    	<h:inputText value="#{myBean.test}">
> 				<f:ajax render="#{myBean.bindingMyTest.clientId}" event="keyup"/> 
> 	    	</h:inputText>
> 	    	<h:inputText id="myText" value="#{myBean.test}" binding="#{myBean.bindingMyTest}"
/>
> 		</h:form>
> produces java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Collection
> while this works:
> 		<h:form id="myForm">
> 	    	<h:inputText value="#{myBean.test}">
> 				<f:ajax render="myForm:myText" event="keyup"/> 
> 	    	</h:inputText>
> 	    	<h:inputText id="myText" value="#{myBean.test}"/>
> 		</h:form>
> On Mojarra both work fine. My guess is here's some problem with the special lifecycle
of bindings properties.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message