Fórum Campos dinâmicos em JavaEE usando JSF 2.2 #460536
08/11/2013
0
Dhiego Silva
Curtir tópico
+ 0Post mais votado
12/11/2013
Não sei se é exatamente isso que voce quer fazer, usando dinamicamente a criação de componentes de tela de acordo com o que voce definir na sua classe.
Mas se for, crie uma classe implementando ComponentSystemEventListener após isso vai pedir para criar os metodos da sua implementação, feito isso voce pode trabalhar dessa maneira:
@Override
public void processEvent(ComponentSystemEvent event) throws AbortProcessingException {
HtmlPanelGrid panel = new HtmlPanelGrid();
HtmlForm form = (HtmlForm) event.getComponent();
Funcoes func = new Funcoes();
//...seu sql
while (rs.next()) {
panel.getChildren().add(func.CriaLabel("Usuário:", "lusuario", true, false));
panel.getChildren().add(func.CriaLabel(rs.getString("usuario"), "usuario", false, false));
//..os tipos de componentes que voce desejar!
}
panel.setColumns(2);
List<UIComponent> children = form.getChildren();
children.add(panel);
Agora a minha Classe de funções onde voce vai criar os componentes (assim foi a forma que eu estruturei)
public UIComponent CriaLabel(String value, String nome, Boolean negrito, Boolean cor) {
FacesContext fctx = FacesContext.getCurrentInstance();
Application app = fctx.getApplication();
HtmlOutputLabel label = (HtmlOutputLabel) app.createComponent(HtmlOutputLabel.COMPONENT_TYPE);
//label.setId(nome);
label.setValue(value);
if (negrito) {
label.setStyle("font-weight: bold;");
}
if (cor) {
label.setStyle(label.getStyle() + "color: #B22222");
}
return label;
}
E a chamada no seu xhtml
<h:form prependId="true" id="tste">
<f:event type="javax.faces.event.PostAddToViewEvent"
listener="#{visualizarPedidoHW.processEvent}" />
</h:form>
Dessa forma voce cria tudo por fora do seu xhtml, faz todo seu select e cria os componentes que quiser mostrar em sua tela na sua classe.
Mas acho que seria melhor voce usar no seu xhtml a tag <ui:repeat /> dentro de um <h:form /> e controlar tudo por dentro de seu xhtml, pois vai encontrar alguns problemas como renderização de tela, ajax entre outro se usar da forma dinamica pela classe.
Tenho esses dois exemplos no meu sistema, mas estou mudando aos poucos para trabalhar tudo diretamente com xhtml.
Espero ter ajudado!
Josivan Laskoski
Gostei + 1
Mais Posts
08/11/2013
Eduardo Pessoa
Gostei + 0
08/11/2013
Dhiego Silva
Gostei + 0
08/11/2013
Eduardo Pessoa
Gostei + 0
10/11/2013
Luciano Martins
Gostei + 0
10/11/2013
Dhiego Silva
Gostei + 0
12/11/2013
Dhiego Silva
Gostei + 0
12/11/2013
Dhiego Silva
Gostei + 0
18/11/2013
Dhiego Silva
Gostei + 0
18/11/2013
Josivan Laskoski
O botão é melhor que voce crie ele dentro da view, vai evitar muitos problemas e estará fazendo uma boa pratica de desenvolvimento.
Mas segue um exemplo:
botao.addActionListener(new ActionListener() {
@Override public void processAction(ActionEvent e) {
FacesContext fctx = FacesContext.getCurrentInstance();
ELContext elctx = fctx.getELContext();
ELResolver resolver = elctx.getELResolver();
MyBean mb = (MyBean) resolver.getValue(elctx, null, "");
mb.doSomething();
}
});
Gostei + 0
18/11/2013
Dhiego Silva
#Código
# Classe Funcoes
//Gerando campo Button
public UIComponent CriaButton(String value, String nome) {
FacesContext fctx = FacesContext.getCurrentInstance();
Application app = fctx.getApplication();
HtmlCommandButton button = (HtmlCommandButton) app.createComponent(HtmlCommandButton.COMPONENT_TYPE);
button.setValue(value);
button.addActionListener(new ActionListener() {
@Override public void processAction(ActionEvent e) {
FacesContext fctx = FacesContext.getCurrentInstance();
ELContext elctx = fctx.getELContext();
ELResolver resolver = elctx.getELResolver();
VisualizarPedidoHW mb = (VisualizarPedidoHW) resolver.getValue(elctx, null, "{VisualizarPedidoHW.processar()}");
mb.processar();
}
});
return button;
}# Classe VisualizarPedidoHW
public String processar(){
return "novo";
}Gostei + 0
21/01/2015
Matheus Santos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)