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;
 }

Reply via email to