Thank you for the quick response.  Calling renderResponse() helped in that I
no longer see the validation message for the required inputText.  However, I
still get a validation message when I change the first selection back to the
unselected state, saying that the selection is required.  Is there any way I
can skip validation when this selection is changed and still get validation
when the form is submitted by some other means?

Eric



Stephen Friedrich-4 wrote:
> 
> If I understand JSF correctly, immediate does not skip validation, but
> only
> moves the processing of events from the "immediate component" to an
> earlier
> phase in the life cycle.
> 
> If you don't do anything special, then after the value change event is
> processed, the rest of the lifecycle, including any validations is
> performed.
> 
> To circumvent that and go directly from the value changed event to the
> rendered
> response use this inside your selectionChange() method:
>       FacesContext.getCurrentInstance().renderResponse();
> 
> Have not tried your example, but I think it should work.
> 
> Eric Fikus wrote:
>> Hello,
>> 
>> I have two tr:selectOneChoice components, where the list of choices in
>> the
>> second depends on the selection made in the first.  The first selection
>> is
>> required.  I have other required fields in the same form.  So I have
>> something that looks like this:
>> 
>>    <tr:messages />
>> 
>>    <tr:panelHorizontalLayout>
>> 
>>      <tr:inputText label="Input:"
>>              required="true"
>>              value="#{testBean.input}" />
>> 
>>      <tr:selectOneChoice label="Select one:"
>>              required="true"
>>              requiredMessageDetail="You must select one"
>>              unselectedLabel="Select one..."
>>              value="#{testBean.firstSelection}"
>>              readOnly="false"
>>              valueChangeListener="#{testBean.selectionChange}"
>>              autoSubmit="true"
>>              id="firstSelection"
>>              immediate="true">
>>              <f:selectItems value="#{testBean.firstList}" />
>>      </tr:selectOneChoice>
>> 
>>      <tr:selectOneChoice label="Select:"
>>              unselectedLabel="Select another one..."
>>              value="#{testBean.secondSelection}"
>>              rendered="true"
>>              partialTriggers="firstSelection">
>>              <f:selectItems value="#{testBean.secondList}" />
>>      </tr:selectOneChoice>
>> 
>>    </tr:panelHorizontalLayout>
>> 
>> I've included the Java code at the end of the message.  It is not very
>> interesting and seems to work, ie, the choices in the second list change
>> each time the selection in the first changes.
>> 
>> The problem is that every time the first selection changes, a message is
>> displayed indicating that the inputText is required ("Input:- Value
>> Required").  If the first selection is changed back to the unselected
>> label,
>> a message is displayed to indicate that the selection is required. 
>> Obviously I have the first selection set to immediate because I don't
>> want
>> validation to occur when this changes, I only want the second list to be
>> updated.  If I do not use immediate="true", messages are not displayed in
>> the tr:messages component but messages are displayed next to the required
>> inputs that are missing.  It works the way I want it to if I used
>> immediate="true" and do not have a messages component.
>> 
>> Questions:
>> - Why is validation performed on an immediate form submission?  It seems
>> to
>> be skipping one stage of validation (and so not displaying the message
>> next
>> to the required component) but still validating and displaying a message.
>> - How can I get the behavior I want and still have a tr:messages
>> component
>> on the page?
>> 
>> Regards,
>> Eric Fikus
>> 
>> 
>> Java code:
>> 
>> // imports not shown
>> public class TestBean
>> {
>>    private String input;
>>    private String firstSelection;
>>    private String secondSelection;
>>    private List<SelectItem> secondList;
>> 
>>    public List<SelectItem> getFirstList()
>>    {
>>       return Arrays.asList(new SelectItem("a"), new SelectItem("b"));
>>    }
>>    
>>    public void selectionChange(ValueChangeEvent event)
>>    {
>>       String value = (String) event.getNewValue();
>>       if (value.equals("a"))
>>       {
>>          secondList = Arrays.asList(new SelectItem("apple"));
>>       }
>>       else if (value.equals("b"))
>>       {
>>          secondList = Arrays.asList(new SelectItem("blue"));
>>       }
>>    }
>> 
>>    // getters and setters for all fields not shown
>> }
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/-Trinidad--selectOneChoice%2C-autoSubmit%2C-immediate%2C-and-required-fields-tf4558304.html#a13009583
Sent from the MyFaces - Users mailing list archive at Nabble.com.

Reply via email to