dev@javaserverfaces.java.net

Re: JSF & Support for Generic Types... Again...

From: Roger Kitain <roger.kitain_at_oracle.com>
Date: Tue, 26 Apr 2011 11:03:00 -0400

Can you please file a spec issue in:

http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC

if it has not already been filed?


On 4/26/11 10:46 AM, Freire, Jose Luis (PT - Lisbon) wrote:
>
> Hi everyone! It’s me again with this 2 year old feature request.
>
> This issue had been addressed in project UEL, however, it’s been
> pretty much ignored, so I’m trying to raise some awareness in the
> benefits of this request.
>
> The issue is documented here (http://java.net/jira/browse/UEL-7), and
> it has a proposed patch.
>
> Here is the description:
>
> Currently JSF doesn’t support generic types in managed beans.
>
> When we have a class like:
>
> *public**class*GenericsTestController<E *extends*Object> {
>
> *private*E value;
>
> *public*E getValue() {
>
> *return*value;
>
> }
>
> *public**void*setValue(E value) {
>
> *this*.value= value;
>
> }
>
> }
>
> And we have this class to use as a managed bean (integerTest):
>
>
> *public**class*IntegerTestController
> *extends*GenericsTestController<Integer> {
>
> *public*String add() {
>
> setValue(getValue()+1);
>
> *return**null*;
>
> }
>
> *public*String subtract() {
>
> setValue(getValue()-1);
>
> *return**null*;
>
> }
>
> }
>
> This JSF code will not work:
>
>
> <h:form>
>
> Value:
>
> <h:inputText value="#{integerTest.value}" />
>
> <h:commandButton action="#{integerTest.add}" value="+" />
>
> <h:commandButton action="#{integerTest.subtract}" value="-" />
>
> </h:form>
>
> With this error:
>
>
> _java.lang.ClassCastException_: java.lang.String cannot be cast to
> java.lang.Integer
>
> at
> genericstest.IntegerTestController.add(_IntegerTestController.java:18_)
>
> The problem is with section 2.2.7 of the specification (1.1):
>
> /The provided property will first be coerced to a String. If there is
> a BeanInfoProperty for this property and there were no errors
> retrieving it, the propertyType of the propertyDescriptor is returned.
> Otherwise, a PropertyNotFoundException is thrown./
>
> The propertyType of a generic property is Object.class, that gets
> coerced to String.class, and we get the ClassCastException.
>
> The proposed patch is against version 1.1 because the SVN links in the
> project page are broken, and to be honest, I would like to see some
> interest it this feature before investing the time to make the updated
> patch.
>
> Thanks,
>
> *José Freire
> *Consulting - Financial Services Industry
> Deloitte Consultores, S.A.
> Deloitte | Edifício Atrium Saldanha, Praça Duque de Saldanha, 1 - 7º,
> 1050-094 Lisboa, Portugal
> Tel/Direct: +(351) 210 423 834 | Fax: +(351) 210 422 950
> jfreire_at_deloitte.pt | www.deloitte.pt
>
> Please consider the environment before printing.
>
>
> *Disclaimer:*
>
> Deloitte refers to one or more of Deloitte Touche Tohmatsu Limited, a
> UK private company limited by guarantee, and its network of member
> firms, each of which is a legally separate and independent entity.
> Please see www.deloitte.com/about for a detailed description of the
> legal structure of Deloitte Touche Tohmatsu Limited and its member firms.
> Privileged/Confidential Information may be contained in this message.
> If you are not the addressee indicated in this message (or responsible
> for delivery of the message to such person), you may not copy or
> deliver this message to anyone. In such case, you should destroy this
> message and kindly notify the sender by reply email. Please advise
> immediately if you or your employer do not consent to Internet email
> for messages of this kind. Opinions, conclusions and other information
> in this message that do not relate to the official business of my firm
> shall be understood as neither given nor endorsed by it.
>


-- 
roger.kitain_at_oracle.com
https://twitter.com/rogerk09
http://www.java.net/blogs/rogerk