Ajuda simples - JSF

6 respostas
alves.Felipe

Dae galera… bao??

Então… eu tenho uma tela de cadastro de contrato e nessa tela eu tenho que adicionar as parcelas (com data de vencimento e valor da parcela) do mesmo.
pensei em fazer assim: criar os 2 campos (data Vcto e Valor Parcela) e um botão <a4j:commandButton que chama um método (adicionaParcelas)
no meu Bean que adiciona esse objeto Parcela na lista de parcelas do Contrato…e mostra na tela essa lista de parcelas… certo???sussegado!?

mas minha dúvida é a seguinte: no meu método adicionaParcelas eu tenho que pegar o valor dos 2 campos por parametros?
tem alguma forma de eu dar um submit e ja pegar esse objeto Parcela populado?para fazer isso tenho que usar 2 form??

então galera é isso… quero saber a melhor forma de fazer isso…
valeo
abraco

6 Respostas

yorgan

Olha acho que você poderia montar uma estrutura com um h:dataTable que utilize objetos tipo Parcela.
Algo como:

Pojo:

public Parcela {
      private Timestamp vencimento; //Pode usar String se não for trab com datas
      private Double valor;

      //Getters e setters
}

Bean:

public SeuBean {
     private List<Parcela> parcelas;
     //Get e Set para 'parcelas'
     public SeuBean() {
         parcelas = pesquisaParcelasExistentes(String parametroDePesquisa);
         if(parcelas == null)
              parcelas = new ArrayList<Parcela>();
         }
     }

     public String adicionarParcela() {
         parcelas.add(new Parcela()); //aqui você adiciona uma linha em branco
         returno "suaTela";
     }
    
}

Com isso basta você criar o HTML para listar a sua dataTable utilizando os dados da variável ‘parcelas’

<h:dataTable value="#{seuBean.parcelas}" var="parcela" >
    <h:column style="width: 250px;">
        <f:facet name="header">
            <h:outputText value="Valor"/>
        </f:facet>
        <h:outputText value="#{parcela.valor}"/>
    </h:column>
    <h:column style="text-align: center">
        <f:facet name="header">
            <h:outputText value="Vencimento"/>
        </f:facet>
        <h:outputText value="#{parcela.vencimento}"/>
    </h:column>
</h:dataTable>

Era +/- isso que você precisava?

[]´s

Daniel

alves.Felipe

é bem isso… essa parte de mostrar as parcelas esta susse…
mas eu quero saber como é a melhor forma de eu enviar os dados para o método adicionarParcela, entende?
pois se eu der um submit no meu form, vai ir todos os outros campos da tela…

yorgan

Então, de uma olhada no método adicionarParcela. Ele adiciona uma linha em branco, dai para o usuario alterar os valores basta mudar os <h:outputText value="#{parcela.valor}"/> por <h:inputText value="#{parcela.valor}"/>
Com isso, quando você chamar um método Salvar ou algo parecido, ele vai pegar os valores que foram informados na tela. Entendeu?

alves.Felipe

aa não tinha percebido…
pode crer… vou fazer assim…
valeo pela ajuda…

alves.Felipe

cara… funcionou… qdo eu dou o submit fica la os valores das parcelas na lista…

mas como eu adiciono um nova linha com ajax, o valor que eu tinha digitado antes vem apagado… entende?
mas se eu adiciono as linhas depois preencho com os valores ai dou o submit, ai vai certo…

//tabela
<rich:dataTable id="listaParcelas" value="#{contratoController.parcelasPagamentos}" var="parcela" >
	<f:facet name="header">
		<rich:columnGroup id="cgParcelas">
			<rich:column id="c1" width="90px">
				<h:outputText value="Valor Parcela" />											</rich:column>
		</rich:columnGroup>
	</f:facet>
	<rich:column id="col1">
		<center><h:inputText id="outTxt1" value="#{parcela.valorParcela}" /></center>
	</rich:column>		
</rich:dataTable>
//botao que adiciona
<a4j:commandButton
	id="cbAdd" 
	action="#{contratoController.adicionaParcelaPagamento}"
	value="Adicionar"
	immediate="true"
	reRender="listaParcelas"/>

tem alguma dica de como eu adicionar mais uma linha e não apagar o valor da linha anterior?

alves.Felipe

Para o valor continuar na lista depois de clicar no bt adicinar, eu tive que fazer isso no meu método adicionaParcelaPagamento:

public String  adicionaParcelaPagamento()
	{
		HttpServletRequest request = FacesUtils.getRequest();
		Enumeration lista = request.getParameterNames();
		
		Object o=null;
		String posicao="0";
		
		while(lista.hasMoreElements())
		{
			o = lista.nextElement();
			if(o.toString().contains("listaParcelas"))
			{
				String [] params = o.toString().split(":");
				//posição 2 é a posição da lista
				posicao = params[2];
				Pagamento pgto=getParcelasPagamentos().get(Integer.parseInt(posicao));
				pgto.setValorParcela(Double.parseDouble(request.getParameter(o.toString())));
			}	
		}
		
		parcelasPagamentos.add(new Pagamento());
		return "";
	}

assim funciona, mas não é muita gambiarra?

Criado 24 de março de 2009
Ultima resposta 24 de mar. de 2009
Respostas 6
Participantes 2