Title: Locating components by id
James,
 
Where are you doing this.  Is it in the render response phase?
 
Rhys
-----Original Message-----
From: James Richards [mailto:[EMAIL PROTECTED]
Sent: May 24, 2006 1:25 PM
To: [email protected]
Subject: Locating components by id

Hello,

I am trying to implement a state mechanism similar to the "flowState" component described in "Taming JSF 1.1":

http://bug.sakaiproject.org/confluence/pages/viewpage.action?pageId=4981

I have a PaginationState class:

public class PaginationState extends UIComponentBase implements Serializable {...}

which is configured as a component

  <component>
    <component-type>com.foo.faces.state.PaginationState</component-type>
    <component-class>com.foo.faces.state.PaginationState</component-class>
  </component>

I would like to use this pagination state to coordinate paging of a custom HtmlDataTable extension:

  <component>
    <component-type>com.foo.faces.CustomPaginationHtmlDataTable</component-type>
    <component-class>com.foo.faces.component.CustomPaginationHtmlDataTable</component-class>
  </component>


I declare the paginationState and custom table in the view which should exhibit the custom behavior:

<foo:paginationState id="paginationState" bean="#{aForm}"/>
<foo:customPaginationDataTable id="facilityLedgerData"
                                                 styleClass="data"
                                                 rowClasses="oddRow,evenRow"
                                                 columnClasses="width125,width100,width100,width100,width100,width300,buttons"
                                                 footerClass="footer"
                                                 var="entry"
                                                 rows="#{aForm.handler.rows}"
                                                 value="#{aForm.model}"
                                                 cellspacing="1"
                                                 width="100%"
                                                 preserveSort="true"
                                                 rowIndexVar="index">
...
</foo:customPaginationDataTable>

The custom table wants to override the "getFirst" property in cases where the paginationState is of a particular value.  I am having trouble, however locating the UIComponent instances:

        public int getFirst() {
System.out.println("Overriding getFirst(): state is " + paginationState);
                int fRwIdx = super.getFirst();
                int rwCnt = super.getRowCount();
                FacesContext ctx = FacesContext.getCurrentInstance();
                UIViewRoot vwRt = ctx.getViewRoot();
                List vwChld = vwRt.getChildren();

for(Iterator itr = vwChld.iterator(); itr.hasNext(); ) {
        UIComponent chld = (UIComponent)itr.next();
        System.out.println("CHILD IS:" + chld.getId());
}
                PaginationState pgSt = (PaginationState)vwRt.findComponent(":paginationState");
                if (pgSt == null) {
                        System.out.println("NO PAGETODISPLAY COMPONENT");
                } else {
                        System.out.println("GOT PAGETODISPLAY COMPONENT:" + pgSt);
                        System.out.println("HASVALUE:" + pgSt.getValueBinding("value").getValue(ctx));
                        System.out.println("HASBEAN:" + pgSt.getBean());
                }
                if (rwCnt < BaseSearchHandler.DISPLAY_ROWS) {
                        return super.getFirst();
                }
                return getCustomFirstRow();
        }


In the above, I try to find paginationState from the UIViewRoot but am, so far, unable to locate it using either ":paginationState" or "paginationState".  I can locate the managed bean upon which pagination state depends but not any of the defined view components.

Is there any way in MyFaces to locate a particular UIComponent by ID?

Thanks for any help,

James

Reply via email to