Hi Volker,
this is exactly what i wanted, and it works. Wonderful!
Thank you,
Rudi
On 4/18/07, Volker Weber <[EMAIL PROTECTED]> wrote:
Hi Rudi,
now i understand what you want.
your _getPersonTable() is recursive invoked, this must be considered
at component creation.
are you realy sure you want this?
if so you need at least the following:
a managedBean with a getter to fetch the outher list of person,
each person object has a same named getter to fetch the sublist.
following is your code a bit modifyed, something like this may work.
Regards,
Volker
<h:form>
<h:dataTable binding="#{TableBean.personTable}" />
</h:form>
// The TableBean:
public HtmlDataTable getPersonTable() {
return _getPersonTable("TableBean.persons", "person");
}
private HtmlDataTable _getPersonTable(String value, String var) {
FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();
HtmlDataTable result = new HtmlDataTable();
result.setVar(var);
result.setValueBinding("value", app.createValueBinding("#{" + value + "}"));
result.setValueBinding("rendered",
app.createValueBinding("#{!empty " + value + "}"));
ValueBinding VBfirstName = app.createValueBinding("#{" + var +
".firstname}");
ValueBinding VBsurName = app.createValueBinding("#{" + var + ".surname}");
ValueBinding VBbirthDate = app.createValueBinding("#{" + var +
".birthdate}");
ValueBinding VBtmpId = app.createValueBinding("#{" + var + ".tmpId}");
ValueBinding VBchildren = app.createValueBinding("#{" + var + ".children}");
ValueBinding VBpropTmpIdToDelete =
app.createValueBinding("#{TableBean.tmpIdToDelete}");
//MethodBinding MBdeleteListener =
app.createMethodBinding("#{TableBean.deleteListener}", new
Class[]{ActionEvent.class});
//MethodBinding MBdeleteListener =
app.createMethodBinding("#{" + var + ".delete}", new
Class[]{ActionEvent.class});
MethodBinding MBdeleteListener =
app.createMethodBinding("#{TableBean.delete}", new
Class[]{ActionEvent.class});
MethodBinding MBaction =
app.createMethodBinding("#{TableBean.action}", null);
UIOutput headerFirstName = new UIOutput();
headerFirstName.setValue("Vorname");
UIOutput headerSurName = new UIOutput();
headerSurName.setValue("Nachname");
UIOutput headerBirthDate = new UIOutput();
headerSurName.setValue("Geburtsdatum");
UIOutput outputFirstname = new UIOutput();
outputFirstname.setValueBinding("value", VBfirstName);
UIOutput outputSurname = new UIOutput();
outputSurname.setValueBinding("value", VBsurName);
UIOutput outputBirthDate = new UIOutput();
outputBirthDate.setValueBinding("value", VBbirthDate);
UIColumn columnFirstName = new UIColumn();
UIColumn columnSurName = new UIColumn();
UIColumn columnBirthDate = new UIColumn();
UIColumn columnDeleteButton = new UIColumn();
UIColumn columnChildren = new UIColumn();
columnFirstName.setHeader(headerFirstName);
columnFirstName.getChildren().add(outputFirstname);
columnSurName.setHeader(headerSurName);
columnSurName.getChildren().add(outputSurname);
columnBirthDate.setHeader(headerBirthDate);
columnBirthDate.getChildren().add(outputBirthDate);
//HtmlCommandButton deleteButton = new HtmlCommandButton();
HtmlCommandButton deleteButton = (HtmlCommandButton)
app.createComponent(HtmlCommandButton.COMPONENT_TYPE);
deleteButton.setImage("images/img_delete.gif");
deleteButton.setActionListener(MBdeleteListener);
UpdateActionListener ual = new UpdateActionListener();
ual.setPropertyBinding(VBpropTmpIdToDelete);
ual.setValueBinding(VBtmpId);
deleteButton.addActionListener(ual);
deleteButton.setAction(MBaction);
columnDeleteButton.getChildren().add(deleteButton);
// enable only one recursion
if (var.indexOf("_next") == -1) {
columnChildren.getChildren().add(_getPersonTable(var +
".persons", var + "_next"));
}
result.getChildren().add(columnFirstName);
result.getChildren().add(columnSurName);
result.getChildren().add(columnBirthDate);
result.getChildren().add(columnDeleteButton);
result.getChildren().add(columnChildren);
return result;
}