I'm using UIColumns (myfaces-1.0.9), and I've hit what appears to be a bug.
I can initialize my page, and then update my page, but I get an
IllegalArgumentException("row is unavailable") exception when the page
is being rendered (but after all of the actions for that page have
been processed).

The problem appears to be in here:

HtmlTableRendererBase.encodeChildren() contains:

                            columns.setRowIndex(k);
                            String columnStyle = styles.getColumnStyle(j);
                            renderColumnBody(facesContext, writer,
uiData, child, columnStyle);

k starts out as 0.  renderColumnBody() eventually calls

        UIColumns(UIData).isAllChildrenAndFacetsValid() line: 646
        UIColumns(UIData).encodeBegin(FacesContext) line: 594
        RendererUtils.renderChild(FacesContext, UIComponent) line: 482
        HtmlTableRenderer(HtmlTableRendererBase).renderColumnBody(FacesContext,
ResponseWriter, UIData, UIComponent, String) line: 205


and isAllChildrenAndFacetsValid cycles through the rowIndexes, and
ends up setting it to -1.

And then sometime later my own code gets called via

        HtmlSelectBooleanCheckbox(UIOutput).getValue() line: 75
        RendererUtils.getBooleanValue(UIComponent) line: 213
        HtmlCheckboxRenderer(HtmlCheckboxRendererBase).encodeEnd(FacesContext,
UIComponent) line: 94
        HtmlSelectBooleanCheckbox(UIComponentBase).encodeEnd(FacesContext) 
line: 341
        RendererUtils.renderChild(FacesContext, UIComponent) line: 491
        RendererUtils.renderChildren(FacesContext, UIComponent) line: 468
        RendererUtils.renderChild(FacesContext, UIComponent) line: 489
        HtmlTableRenderer(HtmlTableRendererBase).renderColumnBody(FacesContext,
ResponseWriter, UIData, UIComponent, String) line: 205

but by this point, the rowIndex is -1 rather than the original 0 value
it should have been.

I'm not sure what to suggest as a fix.   Maybe override
isAllChildrenAndFacetsValid() at UIColumns, store the current
row-index, call super.isAllChildrenAndFacetsValid(), and then restore
the row-index?

I'll go ahead and open this as a Jira issue if someone confirms this
is really a bug.

Thanks.

-Mike

Reply via email to