Hi Sébastien,

Oh ok. In that case you could return "-1" in your converter and change the
setter in your managed bean to accept Object. There you can check if you
have "-1" or a valid Enum and in the latter case, set it! Then you shouldn't
have the validation problem.

In MyFaces 2.0 such scenarios are solved with a new attribute on the
SelectItem and f:selectItem(s) called noSelectionOption or noSelectionValue.

Of course it would be great to have such great version numbers, but it's
really hard to do that over an open source community. We'll try for 2.0 to
document those changes in a better way!

Regards,
Jakob


2010/3/9 <s.pen...@lombardodier.com>

> Hi Jakob,
>
> Actually this change has other implications, like the following one:
>
> In a form, I use a double-SelectManyMenu. One lists all possible values,
> and the other lists the selected values. Two buttons allow the user to
> place a value from one menu to the other.
>
> The business values are listed in a java Enum, and use a converter. To
> make things clearer for our users, the values in the first menu, where all
> possible values are stored, are separated with two "titles". These
> elements actually are SelectItems, with a "-1" value, added as follows:
>
> public List<SelectItem> buildComboContentForSomeBusinessValue() {
>  List<SelectItem> items = new ArrayList<SelectItem>();
>  items.add(new SelectItem("-1","Some title"));
>  items.addAll(buildSomeSelectItemsBasedOnMyBusinessValues());
>  items.add(new SelectItem("-1","Some other title"));
>  items.addAll(buildOtherSelectItemsBasedOnMyBusinessValues());
>  return items;
> }
>
> My converter does the following:
> public Object getAsObject(FacesContext facesContext, UIComponent
> uiComponent, String s) throws ConverterException {
>
>  if ("-1".equals( s)) {
>    return null;
>  }
>  return MyBusinessEnum.valueOf( s);
> }
> (and the same in the other way round, Enum -> String)
>
> This way, if the user selects one of the titles, we do nothing with it.
> But if the user selects one of the real business values, then it is
> processed, added to a list, etc...
>
> This behavior used to work with version 1.1.2, and does not anymore. That
> because the converter is not called anymore during the validation. We're
> comparing for equality "null" and "-1" which would map to the same value
> if the converter was called, but are obviously different without
> conversion. From where I stand, the validation process should not take the
> responsability to decide if objects are the same or not when a converter
> is involved, but should delegate the conversion to the converter before
> testing for equality.
>
> I now have two options: add the titles to the business enum, which is
> ugly, or find a way to make the validation work again as it used to... If
> you think about it, quite a lot of people add elements in a business
> menus. Think of the "All" or "None" options that many menus display. In
> that case, I guess (or... hope :-) that the developpers do not include
> "All" and "None" values in their business enums...
>
> Do you have any hints to help me work around this change? Or am I doing
> something wrong here?
>
> On another topic: since your are following the spec version with the first
> two digits of MyFaces versions, shouldn't you make it a 4-digits version,
> with the third incrementing when breaking changes occur, and the fourth
> incrementing when you are simply patching the code? I'm not opposed to
> breaking changes in the libs I include in my apps, there's no other way to
> evolve sometimes... but I'd just like to know when it's going to happen...
> :-)
>
> Thanks again for your support,
>
> Best regards,
>
> Sébastien
>
>
>
>
>
>
>
> Jakob Korherr <jakob.korh...@gmail.com>
> Sent by: sethfromaust...@gmail.com
>
>
> 08.03.2010 17:20
> Please respond to
> "MyFaces Discussion" <users@myfaces.apache.org>
>
>
>
> To
> MyFaces Discussion <users@myfaces.apache.org>
> cc
>
> Subject
> Re: Trouble upgrading from 1.1.2 to 1.1.7
>
>
>
>
>
>
> Hi Sébastien,
>
> It's great that you were able to figure out the real problem :)
>
> To explain it a little further: the <f:selectItem itemValue="1" .../>
> creates a SelectItem with the String value of "1". If you want to provide
> an
> Integer value you have to provide it via a property in a managed bean that
> returns the integer 1. maybe also #{1} will work, but I'm not really
> sure...
>
> I totally agree that there should be a document (wiki-page etc.) that
> describes such changes. Unfortunately this was far before my time..
> However,
> if we apply similar changes to MyFaces 2.0, I will write them down on a
> wiki
> page, I promise ;)
>
> Regards,
> Jakob
>
> 2010/3/8 <s.pen...@lombardodier.com>
>
> > Hello Jakob,
> >
> > Don't worry for the delay, that's great to have support for this kind of
> > problems :-)
> >
> > First, I changed all the attributes that did not work to String, so that
> > the page worked again. Then I chose one of the attributes and tried the
> > following configurations:
> >
> > - int property -> KO
> > - Integer property -> KO
> > - Integer property and explicit converter:
> > (javax.faces.convert.IntegerConverter registered in my own
> > faces-config.xml) -> KO
> > - String property -> OK
> >
> > Since the field was mapping to a "greater or smaller than" filter value,
> I
> > had not set the page to display an error corresponding to this field. So
> I
> > added the following line to my JSPX:
> > <ice:message for="myOperator" styleClass="errorMsg"/>
> >
> > With this line, I can now see an error message, saying that my value is
> > not a valid option. Here is how the field is written in the JSPX:
> >
> > <ice:selectOneMenu value="#{listController.filter.myOperator}" id=
> > "myOperator">
> >   <f:selectItem itemValue="1" itemLabel="#{msg.search_filter_greater}"
> />
> >  <f:selectItem itemValue="-1" itemLabel="#{msg.search_filter_less}" />
> > </ice:selectOneMenu>
> >
> > I see the call in the IntegerConverter, and can trace it until it is in
> > the UIInput.java class:
> >
> > if (!isValid()) return;
> > validateValue(context, convertedValue);
> > if (!isValid()) return;
> >
> > The first call to "isValid()" returns true, and the second call returns
> > false.
> >
> > By digging a little bit further, I found this, in UISelectOne.java, in
> > method "validateValue(FacesContext context, Object value)" :
> > // selected value must match to one of the available options
> > if (!_SelectItemsUtil.matchValue(value, new _SelectItemsIterator(this)))
> > {
> >  _MessageUtils.addErrorMessage(context, this, INVALID_MESSAGE_ID, new
> > Object[] {getId()});
> >  setValid(false);
> > }
> >
> > The condition here returns true, meaning that the validation fails. And
> > ever further down in SelectItemsUtil.java, method "matchValue(Object
> > value, Iterator selectItemsIter)":
> > Object itemValue = item.getValue();
> > if (value==itemValue || (itemValue.equals(value))) {
> >  return true;
> > }
> >
> > In this condition, the Integer value that has just been created is
> tested
> > for equality with the String value that is in the SelectItem. The
> > validation obviously cannot pass. In version 1.1.2, the same method
> > contained the following code:
> >
> > Object itemValue = item.getValue();
> > if(converter != null && itemValue instanceof String)
> > {
> >  itemValue = converter.getConvertedValue(context, (String)itemValue);
> > }
> > if (value==itemValue || value.equals(itemValue))
> > {
> >  return true;
> > }
> >
> > This code changed the value of the variable "itemValue" to the converted
> > value when a converter was available, and thus tested two Integer
> objects
> > for equality.
> > I think this explains why setting the property to String works in 1.1.7,
> > and leaving the property as an int or Integer, as it used to work in
> > 1.1.2, doesn't work anymore.
> > Searching through MyFaces' JIRA, with a clearer view of the problem lead
> > me to this issue: [1], which explicitly changed the code that is printed
> > here above. Several persons pointed out the fact that this change of
> > behavior would be an upgrade problem for users migrating MyFaces. But
> > since the change was making MyFaces behave more closer to the RI, I
> guess
> > it made sense to do it anyway.
> >
> > More generally speaking, I think that somebody at MyFaces should build
> and
> > maintain a document listing all upgrade-breaking changes that are found
> as
> > the development goes on. It is time-consuming to have to diagnose a
> > problem like I had to do, and seeing that the code has been changed
> > knowing that it would cause upgrade problems is just plain annoying.
> Maybe
> > this document already exists, but my search for upgrade problems with
> > MyFaces did not lead me to it.
> >
> > Anyway, thanks Jakob for your support :-)
> >
> > Best regards,
> >
> > Sébastien
> >
> > [1] http://issues.apache.org/jira/browse/MYFACES-1328
> >
> >
> >
> >
> >
> >
> >
> > Jakob Korherr <jakob.korh...@gmail.com>
> > Sent by: sethfromaust...@gmail.com
> >
> >
> > 06.03.2010 09:56
> > Please respond to
> > "MyFaces Discussion" <users@myfaces.apache.org>
> >
> >
> >
> > To
> > MyFaces Discussion <users@myfaces.apache.org>
> > cc
> >
> > Subject
> > Re: Trouble upgrading from 1.1.2 to 1.1.7
> >
> >
> >
> >
> >
> >
> > Hi Sébastien,
> >
> > Sorry for the long delay - I had to learn a lot last week for a
> university
> > exam...
> >
> > Anyway, the thing with iceSubmit() was just a guess. I thought that
> maybe
> > ICEfaces causes some kind of a wrong submit data or something like that.
> > However, it really bugs me that this does not work out for you! A
> version
> > upgrade should not be a loss of functionality!
> >
> > The next thing you/we could take a look at is the conversion mechanism.
> > Maybe this does not work right, because your String properties work
> > (right?)
> > and your int properties don't. Have you tried setting a converter
> manually
> > at the component which is bound to the int property? The standard
> integer
> > converter's class is javax.faces.convert.IntegerConverter.  Altough this
> > class is registered in the standard-faces-config.xml for type int and
> > java.lang.Integer, it may not be applied (why ever..).
> >
> > Another thing you could try is changing the property from the native int
> > type to java.lang.Integer. Maybe this will work.
> >
> > Hope this helps!
> >
> > Regards,
> > Jakob
> >
> > 2010/3/3 <s.pen...@lombardodier.com>
> >
> > > Hi Jakob,
> > >
> > > I guess that the javascript in iceSubmit() might not the cause of the
> > > problem... The int binding that used to work doesn't work anymore, and
> > > this is what caused the interface to "freeze". Correcting the java
> code
> > to
> > > accept a String made the interface work correctly again....
> > >
> > > I fail to understand how does the javascript iceSubmit() fits in
> this...
> > > but I certainly am not the most knowledgable person on the matter.
> Could
> > > you explain what makes you think that the javascript might be a good
> > > suspect?
> > >
> > > Since I have a release planned in a quite short time, I won't be able
> to
> > > rewrite the whole form using only MyFaces components... sorry about
> > > that... :( But I might have the time to build a sample-app that shows
> > that
> > > the binding that used to work doesn't work anymore. As I understood
> > them,
> > > the release notes of MyFaces do not show anything related to this
> change
> > > of behavior. Do you think it might be a bug?
> > >
> > > Regards,
> > >
> > > Sébastien
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > Jakob Korherr <jakob.korh...@gmail.com>
> > > Sent by: sethfromaust...@gmail.com
> > >
> > >
> > > 02.03.2010 23:39
> > > Please respond to
> > > "MyFaces Discussion" <users@myfaces.apache.org>
> > >
> > >
> > >
> > > To
> > > MyFaces Discussion <users@myfaces.apache.org>
> > > cc
> > >
> > > Subject
> > > Re: Trouble upgrading from 1.1.2 to 1.1.7
> > >
> > >
> > >
> > >
> > >
> > >
> > > Hi,
> > >
> > > You're welcome ;)
> > >
> > > Hmm. Maybe the submitting via the javascript function iceSubmit() does
> > not
> > > function properly. It's really hard to say from this point of view...
> > >
> > > Have you tried using some of the standard MyFaces components (without
> > > ICEFaces)?
> > >
> > > Regrads,
> > > Jakob
> > >
> > > 2010/3/2 <s.pen...@lombardodier.com>
> > >
> > > > Hello Jakob,
> > > >
> > > > Here is the generated HTML of (a part of) a search form. It includes
> a
> > > > "Bigger than/smaller than" field that was bound to an int in my Java
> > > code.
> > > >
> > > > The binding was not working anymore, untill I modified the setter of
> > the
> > > > attribute to take a String and converted to an int afterwards (just
> as
> > a
> > > > quick way of testing if a String binding would work).
> > > >
> > > > I then changed several other bindings similar to this one to use
> > > Strings,
> > > > and the app seems to run way better now :-) but anyway further
> testing
> > > > will be necessary.
> > > >
> > > > HTML:
> > > >
> > > > <tr class="icePnlGrdRow2">
> > > >        <td class="icePnlGrdCol editrQ" id="searchForm:_id1068-1-0">
> > > >                <label class="iceOutLbl bold"
> > > > for="searchForm:aValueToFilter" id="searchForm:_id1075">Label of the
> > > value
> > > > to filter</label>
> > > >        </td>
> > > >
> > > >        <td class="icePnlGrdCol editrR" id="searchForm:_id1068-1-1">
> > > >                <div class="icePnlGrp" id="searchForm:_id1076">
> > > >                        <select style="" class="iceSelOneMnu"
> > > > id="searchForm:valueToFilterOperator"
> > > > name="searchForm:valueToFilterOperator"
> > > >                                onblur="setFocus('');"
> > > > onfocus="setFocus(this.id);" size="1">
> > > >                          <option value="1">Bigger than or equal
> > > > to</option>
> > > >                          <option value="-1">Smaller than/option>
> > > >                        </select>
> > > >
> > > >                        <input style="" class="iceInpTxt"
> > > > id="searchForm:aValueToFilter" name="searchForm:aValueToFilter"
> > > >                          onblur="setFocus('');"
> > > > onfocus="setFocus(this.id);"
> onkeypress="iceSubmit(form,this,event);"
> > > > onmousedown="this.focus();"
> > > >                          size="15" value="" type="text">
> > > >                        <label class="iceOutLbl"
> > id="searchForm:_id1079">
> > > > unit of the value to filter</label>
> > > >
> > > >                        <span id="searchForm:_id1080"></span>
> > > >                </div>
> > > >        </td>
> > > > </tr>
> > > >
> > > > Does it help?
> > > >
> > > > Thanks a lot for your help...
> > > >
> > > > Best regards,
> > > >
> > > > Sébastien
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Jakob Korherr <jakob.korh...@gmail.com>
> > > > Sent by: sethfromaust...@gmail.com
> > > >
> > > >
> > > > 01.03.2010 17:50
> > > > Please respond to
> > > > "MyFaces Discussion" <users@myfaces.apache.org>
> > > >
> > > >
> > > >
> > > > To
> > > > MyFaces Discussion <users@myfaces.apache.org>
> > > > cc
> > > >
> > > > Subject
> > > > Re: Trouble upgrading from 1.1.2 to 1.1.7
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Can you provide some generated HTML (not JSP!!), which includes
> > > components
> > > > that do not work. This could be a great help!
> > > >
> > > > Regards,
> > > > Jakob
> > > >
> > > > 2010/3/1 <s.pen...@lombardodier.com>
> > > >
> > > > > Hello,
> > > > >
> > > > > My guess is that the problem is more general than just a
> javascript
> > > > issue.
> > > > >
> > > > > In my previous message, I gave the "form submit" situation only as
> > an
> > > > > example. The problem actually touches more than just this: I
> cannot
> > > sort
> > > > > my table content by clicking on one column header, I cannot switch
> > > from
> > > > a
> > > > > StackPanel to another, etc...
> > > > >
> > > > > By searching a little bit further, I found out that the values
> that
> > I
> > > > used
> > > > > in combo boxes to show a "greater or smaller" choice (for example,
> > age
> > > > > greater or smaller than 30) are not bound to their java
> counterpart
> > > > > anymore. For example:
> > > > >
> > > > > <ice:selectOneMenu value="#{someController.filter.ageOperator}"
> id=
> > > > > "ageOperator">
> > > > >  <f:selectItem itemValue="1"
> > itemLabel="#{msg.search_filter_greater}"
> > > />
> > > > >  <f:selectItem itemValue="-1"
> itemLabel="#{msg.search_filter_less}"
> > />
> > > > > </ice:selectOneMenu>
> > > > >
> > > > > This menu was bound to a Java integer as follows:
> > > > >
> > > > > private int ageOperator;
> > > > >
> > > > > With 1.1.7, the value is not bound anymore. I needed to change the
> > > type
> > > > of
> > > > > the attribute in my Java class to String for the binding to work
> > > again.
> > > > Is
> > > > > there a special converter that I should add, which was not needed
> in
> > > > 1.1.2
> > > > > ? I can assure you that this runs fine with 1.1.2 :-)
> > > > >
> > > > > I am fairly new to MyFaces. Is there something I should do to make
> > the
> > > > > upgrade easier?
> > > > >
> > > > > Thanks a lot for your help :-)
> > > > >
> > > > > Sébastien
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > Jakob Korherr <jakob.korh...@gmail.com>
> > > > > Sent by: sethfromaust...@gmail.com
> > > > >
> > > > >
> > > > > 01.03.2010 12:25
> > > > > Please respond to
> > > > > "MyFaces Discussion" <users@myfaces.apache.org>
> > > > >
> > > > >
> > > > >
> > > > > To
> > > > > MyFaces Discussion <users@myfaces.apache.org>
> > > > > cc
> > > > >
> > > > > Subject
> > > > > Re: Trouble upgrading from 1.1.2 to 1.1.7
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > Hi,
> > > > >
> > > > > Maybe there's a problem with the javascript that submits the form.
> I
> > > saw
> > > > > However this is just a shot in the blue...
> > > > >
> > > > > Regards,
> > > > > Jakob
> > > > >
> > > > > 2010/3/1 <s.pen...@lombardodier.com>
> > > > >
> > > > > > Hello,
> > > > > >
> > > > > > I am experiencing quite a lot of trouble while upgrading from
> > > MyFaces
> > > > > > 1.1.2 to 1.1.7.
> > > > > >
> > > > > > My application uses IceFaces 1.8.2, Spring 2.5.2 and Hibernate
> > > 3.4.0.
> > > > > >
> > > > > > The only thing that I changed in my Maven 2 build is the version
> > of
> > > > > > MyFaces.
> > > > > > This had an impact on the following jars:
> > > > > >
> > > > > > Added:
> > > > > > myfaces-api-1.1.7.jar
> > > > > > myfaces-impl-1.1.7.jar
> > > > > > commons-digester-1.8.jar
> > > > > > commons-beanutils-1.8.0.jar
> > > > > >
> > > > > > Removed:
> > > > > > myfaces-api-1.1.2.jar
> > > > > > myfaces-impl-1.1.2.jar
> > > > > > commons-digester-1.6.jar
> > > > > > commons-beanutils-1.7.0.jar
> > > > > > commons-codec-1.3.jar
> > > > > >
> > > > > > When I build and deploy my application in Weblogic 9.2.3, the
> > deploy
> > > > > goes
> > > > > > fine, but the actions in the app do not work anymore.
> > > > > > More precisely: as soon as I try to use  JSF components like if
> I
> > > > submit
> > > > > a
> > > > > > form, then nothing happens. This behaviour can be observed with
> > > > several
> > > > > > browsers.
> > > > > >
> > > > > > I tried to find some upgrading guide but didn't find any guide
> > > related
> > > > > to
> > > > > > these versions. And since the version change is minor, I
> expected
> > my
> > > > > > application to run fine with the new jars.
> > > > > >
> > > > > > I tried also tried to override some jar versions, putting back
> the
> > > > > > Digester to version 1.6, and the BeanUtils to version 1.7.0, but
> > > this
> > > > > > didn't change anything. At this point, the only thing that had
> > > changed
> > > > > in
> > > > > > my EAR were the two MyFaces jars.
> > > > > >
> > > > > > Another attempt to find the problem was to upgrade the version
> > > > > gradually.
> > > > > > I switched to MyFaces 1.1.4, and everything worked fine. That's
> > when
> > > I
> > > > > > switched to MyFaces 1.1.5 that the problem appeared. However, I
> > > > haven't
> > > > > > seen anything in the changes from 1.1.4 to 1.1.5[1] that seems
> > > > suspect.
> > > > > >
> > > > > > Is there some configuration changes that I might have missed? Or
> > > some
> > > > > > known compatibility problems regarding this upgrade? Again, I
> > > couldn't
> > > > > > find anything precisely related to these versions up to now, but
> > I'm
> > > > > still
> > > > > > looking.
> > > > > >
> > > > > > Any help would be highly appreciated! :-)
> > > > > >
> > > > > > Best regards,
> > > > > >
> > > > > > Sébastien
> > > > > >
> > > > > > [1]
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
> https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&pid=10600&fixfor=12312310&sorter/field=summary&sorter/order=ASC&sorter/field=resolution&sorter/order=ASC&sorter/field=status&sorter/order=ASC&sorter/field=priority&sorter/order=DESC
>
> >
> > >
> > > >
> > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > ************************ DISCLAIMER ************************
> > > > > > This message is intended only for use by the person to
> > > > > > whom it is addressed. It may contain information that is
> > > > > > privileged and confidential. Its content does not
> > > > > > constitute a formal commitment by Lombard Odier
> > > > > > Darier Hentsch & Cie or any of its branches or affiliates.
> > > > > > If you are not the intended recipient of this message,
> > > > > > kindly notify the sender immediately and destroy this
> > > > > > message. Thank You.
> > > > > >
> *****************************************************************
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > ************************ DISCLAIMER ************************
> > > > > This message is intended only for use by the person to
> > > > > whom it is addressed. It may contain information that is
> > > > > privileged and confidential. Its content does not
> > > > > constitute a formal commitment by Lombard Odier
> > > > > Darier Hentsch & Cie or any of its branches or affiliates.
> > > > > If you are not the intended recipient of this message,
> > > > > kindly notify the sender immediately and destroy this
> > > > > message. Thank You.
> > > > > *****************************************************************
> > > > >
> > > >
> > > >
> > > >
> > > > ************************ DISCLAIMER ************************
> > > > This message is intended only for use by the person to
> > > > whom it is addressed. It may contain information that is
> > > > privileged and confidential. Its content does not
> > > > constitute a formal commitment by Lombard Odier
> > > > Darier Hentsch & Cie or any of its branches or affiliates.
> > > > If you are not the intended recipient of this message,
> > > > kindly notify the sender immediately and destroy this
> > > > message. Thank You.
> > > > *****************************************************************
> > > >
> > >
> > >
> > >
> > > ************************ DISCLAIMER ************************
> > > This message is intended only for use by the person to
> > > whom it is addressed. It may contain information that is
> > > privileged and confidential. Its content does not
> > > constitute a formal commitment by Lombard Odier
> > > Darier Hentsch & Cie or any of its branches or affiliates.
> > > If you are not the intended recipient of this message,
> > > kindly notify the sender immediately and destroy this
> > > message. Thank You.
> > > *****************************************************************
> > >
> >
> >
> >
> > ************************ DISCLAIMER ************************
> > This message is intended only for use by the person to
> > whom it is addressed. It may contain information that is
> > privileged and confidential. Its content does not
> > constitute a formal commitment by Lombard Odier
> > Darier Hentsch & Cie or any of its branches or affiliates.
> > If you are not the intended recipient of this message,
> > kindly notify the sender immediately and destroy this
> > message. Thank You.
> > *****************************************************************
> >
>
>
>
> ************************ DISCLAIMER ************************
> This message is intended only for use by the person to
> whom it is addressed. It may contain information that is
> privileged and confidential. Its content does not
> constitute a formal commitment by Lombard Odier
> Darier Hentsch & Cie or any of its branches or affiliates.
> If you are not the intended recipient of this message,
> kindly notify the sender immediately and destroy this
> message. Thank You.
> *****************************************************************
>

Reply via email to