Ajuda simples - JSF

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

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

é 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…

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?

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

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?

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?