java Server Faces DataTable dinamico

JHola a todos, resulta que debo hacer una tabla dinámica en jsf desde el código, el código es el que se muestra a continuación, la tabla es pintada sin problemas, lo que sucede es que hay duplicidad de datos por cada columna ej:

NIT EMPRESA CIUDAD
123456783322 AsesoftwareIBmdavivienda BogotáYopalCali
123456783322 AsesoftwareIBmdavivienda BogotáYopalCali
123456783322 AsesoftwareIBmdavivienda BogotáYopalCali

Me pinta todos los datos por cada columna, cuando deberia ser algo como

NIT EMPRESA CIUDAD
12345678 Asesoftware Bogotá
33 IBm Yopal
22 davivienda Cali

Para mi el problema esta en la línea: column.getChildren().add(row);
ya que haciendo un paso a paso la logica es correcta, porque llegan los datos correctamente uno por uno, pero al parecer el componente los concatena al momento de hacer el column.getChildren().add(row);

Conocen alguna otra forma de imprimir un datatable desde jsf, cual puede ser el error?

Muchas gracias

Esta es la jsp de la aplicación

<?xml version="1.0" encoding="UTF-8"?>

TODO supply a title

Esta es la funcion del bean de la aplicacion

public void setDinamicTable(HtmlDataTable dinamicTable) {

//ResponseWriter writer = context.getResponseWriter();

tabla = apcFacade.getTablaByConsecutivo(new Long("12"));
dinamicTable.setVar("selectedList");
dinamicTable.setId("tablaId");
/*Iterar todos los valores. */
valores = apcFacade.getValoresTabla(tabla.getNombre());

dinamicTable.setValueExpression("value", createValueExpression("#{DiccionarioBean.valores}", List.class));

int i = 0;
int j=0;
for (TApcColumnas columna:tabla.getTApcColumnasCollection()) {
Column column = new Column();

HtmlOutputText header = new HtmlOutputText();
header.setValue(columna.getNombre());
column.setHeader(header);
// HtmlOutputText output = new HtmlOutputText();
// column.set
// column.getChildren().add(output);
// column.setResizable(true);
Iterator iter = valores.iterator();

// Collection texto = null;
List s = new ArrayList();

while(iter.hasNext()){ j+=1;
Row row = new Row();
Object[] object = (Object[]) iter.next();

//System.out.println("valorrrrr::::i="+i+"="+object[i].toString());
String var = object[i].toString();
// String var = "0";
HtmlOutputText output1 = new HtmlOutputText();
InputText input = new InputText();
// output1.setValueExpression("value", createValueExpression("#{selectedList[" + i + "]}", String.class));
output1.setValue("");
// output1.setValue(var);
//column.
//column.getChildren().add(i, output1);

// column
output1.setValueExpression("value", createValueExpression(var, String.class));
output1.setId("output"+j);
input.setValueExpression("value", createValueExpression(var, String.class));
input.setId("input"+j);
System.out.println("ValorrrrrrrrrrrrrrrrrrrOutput="+output1.getValue());
// column.setValueExpression(var, null);s
//row.setId(var);
//column.set
column.setId("column"+j);

if(!column.getChildren().contains(input)){
// s.add(output1); s.
/// column.getChildren().addAll(j);
row.setId("row"+j);

row.getChildren().add(output1);
column.getChildren().add(row);
//column.getAttributes().put("121", input);
// column.getChildren().add(input);
}
// column.getChildren().addAll(valores);
System.out.println("Cantidadddddddddddddddddd:"+column.getChildCount()) ;
//row.getChildren().add(output1);
//dynamicDataTable.getChildren().add(row);
column.setResizable(true);
// dinamicTable.getChildren().add(column);
//dynamicDataTable.getChildren().add(column);
//column.setValueExpression(codTabla1, null);
/*Create .*/

}//column.getChildren().addAll(s);
dinamicTable.getChildren().add(column);
i+=1;
}

String header = "Column";
String cellValue = "Cell";

this.dinamicTable = dinamicTable;
}