Como renderizar um form dentro de outro - JSF

5 respostas
L

Olá galera guj…

to com um probleminha meio urgente…

tenho um form de produtos q possui um outro form de composicao dentro de uma div.
aiii executa td certinho e tal…
so na pagina de composicao possui uma lista onde apesar de limpar certinho nao consigo renderizar de jeito nenhum…
olhando pelo codigo fonte do browser o id da pagina é

formCadastrarProduto:Composicao:formCadastrarComposicao:painelListaComposicao

nao tenho nem ideia de como fazer…

...
<script type="text/javascript">	
function mostra(){
	if (document.getElementById("divComposicao").style.display == "block"){
		document.getElementById("divComposicao").style.display = "none";
	}else{
		document.getElementById("divComposicao").style.display = "block";
	}
}
</script>

...


<a4j:form id="formCadastrarProduto"> ...
...

<h:outputText value="#{msgs['page.label.composto']}" /> 
<h:selectBooleanCheckbox id="compostoProduto" value="#{produtoMB.produto.selecionadoComposto}" onclick="mostra();"/>

	<div id="divComposicao" style='display: none;'>
		<jsp:include page="composicao.jsp" />
	</div>
	<br />
...
        &lt;a4j:commandLink id="btnInsertProduto"
		reRender="tabelaListaProduto,panelGridCadastroProduto, [b]????????????[/b]"
		actionListener="#{produtoMB.insertAction}"
		rendered="#{not produtoMB.editable}"&gt;
	&lt;h:graphicImage style="border:0" url="/images/Save.gif" /&gt;
	&lt;/a4j:commandLink&gt;

...
&lt;/a4j:form&gt;

composicao.jsp

...
&lt;a4j:form id="formCadastrarComposicao"&gt;

&lt;h:panelGrid columns="2" columnClasses="gridContent" border="2" id="panelGridCadastroComposicao" &gt;
&lt;h:panelGroup&gt;

	&lt;rich:panel bodyClass="inpanelBody" style="width:350px" id="painelListaComposicao"&gt;
					&lt;f:facet name="header"&gt;
                                              Lista de Insumos
                                        &lt;/f:facet&gt;
					&lt;rich:dataTable binding="#{composicaoMB.table}"
						onRowMouseOver="this.style.backgroundColor='#F8F8F8'"
						onRowMouseOut="this.style.backgroundColor='#{org.richfaces.SKIN.tableBackgroundColor}'"
						onRowClick="this.style.backgroundColor='#F1F1F1'" rows="10"
						width="100%" id="tabelaListaComposicao"
						value="#{composicaoMB.listaAutoComplete}" var="resultado"&gt;

						&lt;rich:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Produto" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{resultado.composto.nome}" /&gt;
						&lt;/rich:column&gt;
						&lt;rich:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Quantidade" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{resultado.quantidade}" /&gt;
						&lt;/rich:column&gt;
					&lt;/rich:dataTable&gt;
				&lt;/rich:panel&gt;

&lt;/h:panelGroup&gt;
&lt;/h:panelGrid&gt;
...
&lt;/a4j:form&gt;

Se alguem puder me ajudar… agradeço…
vlw bjs a td’s :wink:

5 Respostas

R

Form dentro de form não funciona muito bem.

L

ok entao como posso fazer… td na msm pagina??

N

Em composicao.jsp, retire o form (<a4j:form id=“formCadastrarComposicao”>) e teste. :slight_smile:

L

Olá galera, obrigada pelas dicas… consegui resolver … na verdade o problema nao era no reRendered… e sim no meu metodo de limpar a lista…
Aprendi algumas coisas q nao sabia, muito legal…

  • primeiro eu estava dando so um new ArrayList() e achava q criando uma nova lista ja era, mas na verdade nao é bem assim…
  • tentei com o metodo remove() e tb nao funcionava, pelo falo de tentar ler a lista e ir removendo…

Consegui resolver assim:

void clearListaAutoComplete(List&lt;Composicao&gt; listaAutoComplete) {
		//this.listaAutoComplete = new ArrayList&lt;Composicao&gt;();   // esse nao funciona..
		
		Iterator&lt;Composicao&gt; it = listaAutoComplete.iterator();
		while(it.hasNext()){
			if(it.next() != null) it.remove();
		}	
	}

Desde ja agradeço a atenção;… :wink:

ps: nao tive problemas nao com os forms, funciono perfeitamente…

L

Quase perfeitamente neh…hauha

Bom agora estou com um problema onde ele renderiza os forms, so consegui trazer a lista de composicao atravez da sessao…
toquei de composicaoMB.listaAutoComplete para composicaoMB.sessionListaAutoComplete

porque nao sei ql o motivo mas qd ele inseria um novo produto… vinha a lista de composicao certinha: composicaoMB.listaAutoComplete
Mas qd vinha do botao ALTERAR… so consegui acessar a lista assim: produtoMB.composicaoManager.listaAutoComplete

aii resolvi colocar td na sessao msm…

Enfim mas agora, depois do evento de editar, meu botao de composicaoMB.addListaProdutos nao funciona… como se nao tivesse nenhuma acao nele…

Sera que o problema é de reRender ou nao tem nd haver… :roll:

Criado 29 de setembro de 2009
Ultima resposta 1 de out. de 2009
Respostas 5
Participantes 3