Can anyone help with this please?
It would be great is someone can guide me on how to make this work. It ties with the selectOneMenu problem I posted earlier.

Thanks,
Aneesha

---------- Forwarded message ----------
From: Aneesha Govil <[EMAIL PROTECTED]>
Date: Sep 22, 2006 2:55 PM
Subject: selectOneMenu and a4j:support
To: [EMAIL PROTECTED]

Hi all,

I am using selectOneMenu to create a drop down, on change of the dropdown I need to display a dynamic table. When the page first loads, I do not want to display the table.

In my jsp, I have used the following code:
<h:selectOneMenu required="true" value="#{ajaxtableform.selectedTable}">
         <f:selectItems value="#{tableform.tables}"/>
         <a4j:support event="onchange" ajaxSingle="true" reRender="tabledata" />
    </h:selectOneMenu>
    <a4j:region>
    <h:dataTable
        id="tabledata"
        value="#{ajaxtableform.myList}"
        var="myItem"
        binding="#{ajaxtableform.myDynamicDataTable }"
   />

The form bean is as follows:

public class TableForm {
    private List<SelectItem> tables = null;
    private String selectedTable = null;
   
    private GenericTable[] myRecords;
    private String[] headers;
    private HtmlDataTable myDynamicDataTable;
    private List myList;
   
    public String getSelectedTable() {
        return selectedTable;
    }

    public void setSelectedTable(String selectedTable) {
        this.selectedTable = selectedTable;
    }

    public List<SelectItem> getTables() {
        if (tables == null) {
            tables = new ArrayList<SelectItem>();
            tables.add(new SelectItem("1", "Table 1"));
            tables.add(new SelectItem("2", "Table 2"));
        }
        return tables;
    }
   
    public GenericTable tableToDisplay() {
// Getting a Null pointer exception here
        if (selectedTable.equals("1")) {
            return new InventoryItem();
        }
        else if ( selectedTable.equals("2")) {
            return new SecondInventoryItem();
        }
        else return null;
    }
   
    public GenericTable[] getMyRecords() {
        return myRecords;
    }

    public HtmlDataTable getMyDynamicDataTable() {
        if (FacesContext.getCurrentInstance().getRenderResponse()) {
            loadMyList(); // Reload to get most recent data.
            populateMyDataTable();
        }
        return myDynamicDataTable;
    }

        private void loadMyList() {
       
        headers = tableToDisplay().getHeaders();
       
        myRecords = (selectedTable.equals("1")) ? AjaxTableDataBean.getCarInventory() : AjaxTableDataBean.getSecondInventory();
        myList = new ArrayList();
        for (int i = 0; i < myRecords.length; i++) {
            myList.add(Arrays.asList(myRecords[i].getRow()));
        }
    }

    private void populateMyDataTable() {
        myDynamicDataTable = new HtmlDataTable();
        // Any rows?
        if (myList != null && myList.size () > 0) {
            // Set columns.
            for (int i = 0; i < headers.length; i++) {
               
                // Set header (optional).
                UIOutput header = new UIOutput();
                header.setValue(headers[i]);

                // Set output.
                UIOutput output = new UIOutput();
                ValueBinding myItem =
                    FacesContext
                        .getCurrentInstance()
                            .getApplication()
                                .createValueBinding("#{myItem[" + i + "]}");
                output.setValueBinding("value", myItem);

                // Set column.
                UIColumn column = new UIColumn();
                column.setHeader(header);
                column.getChildren().add(output);
               
                // Add column.
                myDynamicDataTable.getChildren().add(column);
            }
        }
    }

    public List getMyList() {
        return myList;
    }

    public void setMyList(List myList) {
        this.myList = myList;
    }
}

Note that the default selectedTable is null and it still tries to load the table. Due to this I get the following error:
Caused by: javax.faces.el.EvaluationException : Exception getting value of property myDynamicDataTable of base of type : demo.ajaxutils.TableForm
Caused by: java.lang.NullPointerException
    at demo.ajaxutils.TableForm.tableToDisplay(TableForm.java:42)
    at demo.ajaxutils.TableForm.loadMyList(TableForm.java:66)
    at demo.ajaxutils.TableForm.getMyDynamicDataTable(TableForm.java:58)
    ... 56 more

I want the page to be displayed without trying to render the table the first time. On change of the drop down it should be rendered. Please help me how can I do this. I am using MyFaces.

Thanks.

Reply via email to