You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Mike Kienenberger <mk...@gmail.com> on 2005/04/29 21:35:41 UTC

Bug in UIColumns/UIData isAllChildrenAndFacetsValid interaction?

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

Re: Bug in UIColumns/UIData isAllChildrenAndFacetsValid interaction?

Posted by Sean Schofield <se...@gmail.com>.
I would go ahead an open a JIRA issue.  It sounds like you have enough
detailed information to support your case.  I'm not really familiar
with that component so I will leave it to others to weigh in.  In any
event, your issue is less likely to disappear over time if its in JIRA
;-)

sean


On 4/29/05, Mike Kienenberger <mk...@gmail.com> wrote:
> 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
>