That doesn't work neither, because the selectOneChoice boxes are created by an
<tr:iterator> and they are all on required=true. So when I set
immediate="true", the following selectOneChoice components will be validated
since they are all on required=true and immediate=true.
I solved that problem with the following trick, since I don't need any
validation at that point:
Iterator<?> messageIter =
FacesContext.getCurrentInstance().getMessages();
while(messageIter.hasNext()) {
messageIter.next();
messageIter.remove();
}
I do that at the end of my ValueChangeListener, when everything went fine.
But thank you anyway for your hint.
Best Regards,
Andreas
-----Ursprüngliche Nachricht-----
Von: Omar Elprince [mailto:[email protected]]
Gesendet: Mittwoch, 9. September 2009 16:45
An: MyFaces Discussion
Betreff: Re: AW: [Trinidad] How to use an iterator, selectOneChoice and
partialTriggers?
Use immediate="true"
--Omar
On Sep 9, 2009, at 8:24 AM, "Roeder, Andreas" <[email protected]
> wrote:
> Thanx a lot, that worked like a glue. Just one problem is left: all
> the selectOneChoice components are on required="true". How can I
> avoid the validation?
>
> I already tried to call at the end of the ValueChangeListener the
> call:
>
> FacesContext.getCurrentInstance().renderResponse();
>
> but no success.
>
> -Andreas
>
> -----Ursprüngliche Nachricht-----
> Von: Andrew Robinson [mailto:[email protected]]
> Gesendet: Montag, 7. September 2009 02:46
> An: MyFaces Discussion
> Betreff: Re: [Trinidad] How to use an iterator, selectOneChoice and
> partialTriggers?
>
>
> If you give partial triggers an EL expression it must evaluate to
> type String[]. The value change listener is fired for the current
> iteration, so if you click item 3, the event will be broadcast for
> the selectOneChoice inside the index 2 of tr:iterator. To move the
> iterator to a new index you need to save the current row index, set
> the new index, evaluate code and then set it back.
>
> An iterator stamps out one component and a component only has 1 ID,
> so you cannot put EL in the ID like you did below. I would advise
> using <f:attribute/> if you need to store the ID on the component,
> but just give the choice a static ID.
>
> The resulting IDs on the client will be like "i1:0:soc1",
> "i1:1:soc1", etc if your iterator had ID "i1" and your
> selectOneChoice had ID "soc1". So the :#: in between represents the
> stamp index.
>
> -Andrew
>
> On Fri, Sep 4, 2009 at 7:32 AM, Roeder, Andreas<[email protected]
> > wrote:
>> I'm trying to create generic selectOneChoice elements. When the first
>> selectOneChoice value changes it should update the next one in the
>> list and so on. I tried to do that via the id, partialTriggers and a
>> ValueChangeListener:
>>
>> <tr:iterator value="#{genericFormBean.formDesc.fieldList}"
>> var="field">
>> <tr:selectOneChoice
>> id="#{field.id}"
>> partialTriggers="#{field.partialTriggers}"
>> valueChangeListener="#{genericFormBean.valueChange}"
>> value="#{genericFormBean.formDesc.modelMap[field.id]}"
>> <f:selectItems
>>
>> value="#{genericFormBean.selectItemMap[field.itemList]}" />
>> </tr:selectOneChoice>
>> <tr:iterator>
>>
>> But I cannot set the id of the selectOneChoice element. When I try to
>> get the other selectOneChoice elements in the valueChangeListener I
>> just see one element in the iterator.childs() collection. Why is
>> that?
>>
>> I also tried to use a custom renderer to set the id, but as soon I
>> change the id of one selectOneChoice element all other elements are
>> getting the same id. It's pretty confusing to me.
>>
>> Is there another way to do that?
>>
>> Best Regards,
>>
>> Andreas
>>
>>
>