salve pessoal! estou dando uma estudada na criação de components… e estava querendo descobrir como fazer uma coisa mais dinamica, assim, quando a pessoa usar essa tag, ela vai apenas colocar um list vindo do managebean e vai gerar toda a table dinamicamente.
try {
UIData data = (UIData) component;
Object objeto = data.getValue();
if (objeto instanceof List) {
List lista = (List) objeto;
for (Object item : lista) {
Class classe = item.getClass();
Field[] fields = classe.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Coluna.class)) {
UIColumn coluna = new UIColumn();
HtmlOutputLabel label = new HtmlOutputLabel();
field.setAccessible(true);
label.setValue(field.get(item));
field.setAccessible(false);
coluna.getChildren().add(label);
data.getChildren().add(coluna);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
esse codigo basicamente pega o value da minha tag, joga num list, ai ele vai pegar cada item da lista, buscar os atributos e SE achar a anotacao “Coluna” (q eu criei) ela cria um output e uma coluna.
Cara, funciona, eu vejo ele criar as colunas certo, só q não renderiza. alguem sabe me explicar porq?! o estranho é q se eu coloco uma tag <h:column> dentro da minha tag,ela renderiza certinho…