Então vamos continuar, ficamos na parte da declaração abaixo:
expressionFactory = app.getExpressionFactory();
Lembrando que o expressionFactory é para criar uma fabrica de expressão EL e assim poder declarar a expressão como costumamos no JSF #{bean.variavel}.
Então com a instância criada vamos definir valores para os componentes como, por exemplo o valor e o For do OutputLabel já concatenando com a ID do InputText, abaixo:
opl.setValue("Campo " + (z + 1) + ": "); opl.setId("lbcampo" + z); opl.setFor("campoID" + z); in = new InputText(); in.setId("campoID" + z); in.setSize(2);
Você pode está perguntando porque só instanciou ou criou uma nova instância para o inputText, lembra que vamos incluir a expressionLanguage neste componente e por isso devemos fazer essa ação, caso não fizesse isso iria aparecer o NullPointerException. Pronto com isso já sabemos que de acordo com o valor do Z teremos Campo 1,2,3,4...
<p:outputLabel value="Campo 1" id="lbcampo0" for="campoID0"/>
E também sabemos temporariamente que o inputText ficará
<p:inputText id="campoID0" size="2"/>
Agora vamos colocar a cereja no bolo, ou seja, vamos incluir a expressão para que o componente pegue o valor na view e para isso faça como abaixo:
ValueExpression ve = expressionFactory.createValueExpression(elContext, "#{bean.campo[" + z + "]}", String.class);
Veja que agora declaramos o ValueExpression, com isso estamos adicionando o que acostumamos fazer somente na view, incluir um parâmetros para capturar o valor que o usuário digitou. Note que é uma expressionFactory criando o valor pegando o contexto e definido a classe que terá o valor na view, neste caso o valor foi uma string, mas poder ser mudado de acordo com sua necessidade. Agora devemos adicionar a ValueExpression para ser incluída no componente inputText
in.setValueExpression("value", ve);
O nome value dever ser colocado sempre, pois representa a tag value do componente inputText e a variavel ve que é o EL. Para dar o toque final deveremos adicionar os componentes no panel que criamos no inicio como abaixo:
panel.getChildren().add(opl); panel.getChildren().add(in);
Com isso adicionamos os componentes dinâmicos dentro do panel.
Então é isso pessoal, qualquer dúvida estou a disposição só comentar aqui ou então enviar um e-mail. Até a próxima!
2 comentários:
Parabéns pelo post !!!
Estudei as 3 partes e funciona muito bem.
Obrigado pelo compartilhamento da informação.
Abraços e até mais
@Sergio Daniel. Obrigado você pelo feedback. Que bom que te ajudou, fico feliz por isso.
Postar um comentário