¿Cómo implementar una lista dinámica con un componente compuesto JSF 2.0?

Hice esta pregunta y aunque la respuesta satisfizo directamente mis necesidades, me queda la sensación de que tiene que haber una solución más simple para este problema específico.

Me gustaría tener un componente compuesto que acepte una lista de elementos (el tipo de los elementos acordados para que los miembros puedan usarse libremente dentro del componente compuesto)

El CC (componente compuesto) muestra la lista de elementos y permite sumr y restar elementos.

Me gustaría hacer esto de la manera más simple y eficiente.

Para ilustrar el problema, un ejemplo:

enter image description here

La definición debería ser bastante simple (a menos, por supuesto, no es :-)):

 

La forma más abstracta de un objeto Field sería:

 public class Field{ String uuid; String value; } 

Supongo que es eso. ¿Cómo implementarías esto de una manera simple?

¡Gracias!

una en un componente compuesto con un UIComponent respaldo que puedes vincular por el atributo componentType de . En el UIComponent respaldo puede mantener el DataModel y definir las acciones.

dynamicFieldList.xhtml

              

(el puede ser su componente de campo compuesto si es necesario)

com.example.DynamicFieldList

 @FacesComponent(value="dynamicFieldList") // To be specified in componentType attribute. @SuppressWarnings({"rawtypes", "unchecked"}) // We don't care about the actual model item type anyway. public class DynamicFieldList extends UINamingContainer { private UIData table; public void add() { ((List) getAttributes().get("value")).add(new Field("somelabel")); } public void remove() { ((List) getAttributes().get("value")).remove(table.getRowData()); } public UIData getTable() { return table; } public void setTable(UIData table) { this.table = table; } } 

Úselo de la siguiente manera:

    

con solo esto

 @ManagedBean @ViewScoped public class Bean implements Serializable { private List fields; public Bean() { fields = new ArrayList<>(); } public List getFields() { return fields; } } 

y

 public class Field implements Serializable { private String label; private String value; public Field() { // } public Field(String label) { this.label = label; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }