[ 
https://issues.apache.org/jira/browse/TOMAHAWK-1429?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12719627#action_12719627
 ] 

Mathias Werlitz commented on TOMAHAWK-1429:
-------------------------------------------

org.apache.myfaces.renderkit.html.ext.HtmlCheckboxRenderer.renderSingleCheckbox()
 should looke like:

protected void renderSingleCheckbox(FacesContext facesContext, HtmlCheckbox 
checkbox) throws IOException
            {
                String forAttr = checkbox.getFor();
                if (forAttr == null)
                {
                    throw new IllegalStateException("mandatory attribute 
'for'");
                }
                int index = checkbox.getIndex();
                if (index < 0)
                {
                    throw new IllegalStateException("positive index must be 
given");
                }

                UIComponent uiComponent = checkbox.findComponent(forAttr);
                if (uiComponent == null)
                {
                    throw new IllegalStateException("Could not find component 
'" + forAttr + "' (calling findComponent on component '" + 
checkbox.getClientId(facesContext) + "')");
                }
                if (!(uiComponent instanceof UISelectMany))
                {
                    throw new IllegalStateException("UISelectMany expected");
                }

                UISelectMany uiSelectMany = (UISelectMany)uiComponent;
                Converter converter = getConverter(facesContext, uiSelectMany);
                List selectItemList = 
RendererUtils.getSelectItemList(uiSelectMany);
                if (index >= selectItemList.size())
                {
                    throw new IndexOutOfBoundsException("index " + index + " >= 
" + selectItemList.size());
                }

                SelectItem selectItem = (SelectItem)selectItemList.get(index);
                Object itemValue = selectItem.getValue();
                String itemStrValue = getItemStringValue(facesContext, 
uiSelectMany, converter, itemValue);

                Set lookupSet = 
RendererUtils.getSubmittedValuesAsSet(facesContext, uiSelectMany, converter, 
uiSelectMany);
                boolean useSubmittedValues = lookupSet != null;
                if (!useSubmittedValues)
                {
                    lookupSet = 
RendererUtils.getSelectedValuesAsSet(facesContext, uiComponent, converter, 
uiSelectMany);
                }    
                boolean checked = (useSubmittedValues && 
lookupSet.contains(itemStrValue))
                    || (!useSubmittedValues && 
lookupSet.contains(itemStrValue));
                
                ResponseWriter writer = facesContext.getResponseWriter();
                
                //renderCheckbox(facesContext,
                //               uiSelectMany,
                //               itemStrValue,
                //               selectItem.getLabel(),
                //               isDisabled(facesContext,uiSelectMany),
                //               lookupSet.contains(itemStrValue), true);
                
                String itemId = renderCheckbox(facesContext,
                        uiSelectMany,
                        itemStrValue,
                        isDisabled(facesContext,uiSelectMany),
                        checked, false, index);

                //Render the
                // label element after the input
                boolean componentDisabled = isDisabled(facesContext, 
uiSelectMany);
                boolean itemDisabled = selectItem.isDisabled();
                boolean disabled = (componentDisabled || itemDisabled);

                HtmlRendererUtils.renderLabel(writer, uiSelectMany, itemId, 
selectItem.getLabel(), disabled);
                
            }

> t:checkbox not checked correctly after validation error
> -------------------------------------------------------
>
>                 Key: TOMAHAWK-1429
>                 URL: https://issues.apache.org/jira/browse/TOMAHAWK-1429
>             Project: MyFaces Tomahawk
>          Issue Type: Bug
>    Affects Versions: 1.1.8
>         Environment: Sun RI, JSF 1.2
>            Reporter: Mathias Werlitz
>
> If you use t:selectManyCheckbox with layout="spread" and t:checkbox the 
> selection of the checkboxes after an validation error is incorrect. When 
> using layout="pageDirection" it is correct.
> When using layout="spread" and t:checkbox HtmlCheckboxRenderer renders the 
> last successfully validated component values (intenally stored 
> HtmlSelectManyCheckbox.value) checked after an validation error. This is not 
> correct. It should render the checkboxes as submitted like 
> HtmlCheckboxRenderer does when t:selectManyCheckbox is used with 
> layout="pageDirection".
> The method renderSingleCheckbox() of 
> org.apache.myfaces.renderkit.html.ext.HtmlCheckboxRenderer should lookup the 
> valueSet like in renderCheckboxListVertically() and determine the checked 
> boolean more like renderGroupOrItemCheckbox().
> Example:
> <t:selectManyCheckbox id="test" required="true" value="#{value}"  
> layout="spread" >
>       <t:selectItems ...../>
> </t:selectManyCheckbox>
> <t:checkbox for="test" index="0" />
> <t:checkbox for="test" index="1" />
> <t:checkbox for="test" index="2" />
> <h:inputText required="true" />
> 1. you select checkbox one and submit the form -> validation error for 
> inputText
> 2. you deselect checkbox one and submit the form -> validation error for 
> selectManyCheckbox  and inputText BUT
>     checkbox one is checked although it was submited not checked

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

Reply via email to