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.

