Problemas com a4j e janela modal

5 respostas
T

Bom dia,
estou utilizando o componente rich modalpanel para gerar telas cadastro e ediçao na mesma página. Esta página é formada por um combobox que mostra os tipos q os brindes podem ser vinculados e o nome do brinde. Ao clicar em editar na datatable esse janela modal será aberta para o usuário editar as configurações daquele brinde que foi selecionado.

Estou com problema para passar os valores clicado para o form modal, e no caso do novo brinde que outro form modal é mostrado na hora que coloco a descrição do brinde que executo o método insertAction() o objeto Transferer do brinde no manage bean está como nulo, é como se nao atribuisse nada ao manage bean.

Quem estiver disposta a ajudar posso dar mais detalhes.

Obrigado

5 Respostas

T

Código da minha página.

<ui:composition template="../templates/template_administrativo.xhtml">
	<ui:define name="titulo">
		<h:outputText value="CRMv8 - Lista de Brindes" />
	</ui:define>
	<ui:define name="estiloCss">
		<link href="../css/portal.css" rel="stylesheet" type="text/css" />
	</ui:define>
	<ui:define name="portal">
		<tr>
			<td width="100%" height="600" align="center" valign="top" alt="">
			</td>
		</tr>
		<!--		==============================  PAGINA INICIAL  ================================================== -->
			<f:view>
				<rich:panel style="width:520px; margin-left:20%;" headerClass="cabecalhoRichPanel" id="painelBrinde">
					<f:facet name="header">
		                <h:outputText value="Lista de Brindes" />
		            </f:facet>
						
						<table width="100%" border="0" cellspacing="1" cellpadding="0">
							<tr>
								<td width="6%">
								<div align="center">
									<a4j:commandLink id="novolink" immediate="true" title="Criar Novo Brinde" reRender="novoPanel">
										<h:graphicImage value="../img/btnNovo.png" styleClass="botao" />
										<rich:componentControl for="novoPanel" attachTo="novolink" operation="show" event="onclick" />
									</a4j:commandLink>
								</div>
								</td>
								<td width="6%">
								<div align="center">
									<h:outputLink value="listaBrindes.img" title="Fechar">
										<h:graphicImage value="../img/casa.png"
											style="margin-right: 10px; border:0" />
									</h:outputLink>
								</div>
								</td>
								<td width="82%"></td>
								<td width="6%">
								<div align="center">
									<h:outputLink value="principal_administracao.img" title="Fechar">
										<h:graphicImage value="../img/btnFechar.png"
											style="margin-right: 10px; border:0" />
									</h:outputLink>
								</div>
								</td>
							</tr>
						</table>
		            <a4j:form>
					<a4j:keepAlive beanName="brindeConsultMB" />
					
					<rich:dataTable value="#{brindeConsultMB.listarBrindes}"
						var="brindeT" width="400" id="lista" border="0" cellspacing="1"
						cellpadding="0" align="center">
						<f:facet name="header">
							<rich:columnGroup>
								<rich:column>
									<h:outputText value="" />
								</rich:column>
								<rich:column>
									<h:outputText value="Descrição" />
								</rich:column>
								<rich:column>
									<h:outputText value="Editar" />
								</rich:column>
								<rich:column>
									<h:outputText value="Excluir" />
								</rich:column>
							</rich:columnGroup>
						</f:facet>
						<rich:column>
							<h:graphicImage value="/img/pasta.gif" width="15px" height="15px"
								rendered="#{brindeT.tipoPai}" />
							<h:graphicImage value="../img/gift.png" width="15px"
								height="15px" rendered="#{brindeT.tipoFolha}" />
						</rich:column>
	
						<rich:column>
							<!--  COLUNA DESCRICAO PASTA/BRINDE -->
<!--							<a4j:form>-->
								<a4j:commandLink action="#{brindeConsultMB.listarPastaBrindes}"
									immediate="true" title="Listar Pasta de Brindes"
									rendered="#{brindeT.tipoPai}" reRender="lista">
									<h:outputText value="#{brindeT.dsbrinde}" />
								</a4j:commandLink>
<!--							</a4j:form>-->
							<h:outputText value="#{brindeT.dsbrinde}"
								rendered="#{brindeT.tipoFolha}" />
						</rich:column>
						<!--  FIM COLUNA DESCRICAO PASTA/BRINDE -->
	
						<rich:column>
							<!--  COLUNA EDITAR PASTA/BRINDE -->
<!--							<a4j:form>-->
								<a4j:commandLink action="#{brindeUpdateDeleteMB.editarBrinde}"
									title="Editar Brindes"
									rendered="#{not brindeT.tipoPai}"
									reRender="editarDescricao">
									<h:graphicImage value="../img/edit.gif" width="15px"
										height="15px" styleClass="botao" />
									<rich:componentControl for="editar" attachTo="editarlink"
										operation="show" event="onclick" />
								</a4j:commandLink>
								<a4j:commandLink action="#{brindeUpdateDeleteMB.editarBrinde}"
									id="editarlink" title="Editar Pasta de Brindes"
									rendered="#{brindeT.tipoPai}"
									reRender="editarDescricao">
									<h:graphicImage value="../img/edit.gif" width="15px"
										styleClass="botao" height="15px" />
									<rich:componentControl for="editar" attachTo="editarlink"
										operation="show" event="onclick" />
								</a4j:commandLink>
						</rich:column>
						<!--  FIM COLUNA EDITAR PASTA/BRINDE -->
	
						<rich:column>
							<h:outputLink value="#" title="Excluir Brinde"
								rendered="#{brindeT.tipoFolha}">
								<h:graphicImage value="../img/btnExcluir.png" width="15px"
									height="15px" styleClass="botao" />
							</h:outputLink>
						</rich:column>
					</rich:dataTable>
				</a4j:form>
				</rich:panel>
			</f:view>
		<!--		============================== FIM PAGINA INICIAL  ================================================== -->
				
		<!--		==============================  Visao Modal EDITAR DA PAGINA  =================================== -->
				<rich:modalPanel width="650" height="300" id="editar">
					<f:view>
						<f:facet name="header">
							<h:panelGroup>
								<h:outputText value="Edição de Brinde"
									styleClass="topotable" />
							</h:panelGroup>
						</f:facet>
						<f:facet name="controls">
							<rich:componentControl for="editar" attachTo="editarhidelink"
								operation="hide" event="onclick" />
						</f:facet>
						
						<a4j:form id="formEditar">
						<a4j:keepAlive beanName="brindeUpdateDeleteMB" />
						<table width="100%" border="0" cellspacing="1" cellpadding="0">
							<tr>
								<td width="6%">
								<div align="center">
									<h:commandLink action="#{brindeUpdateDeleteMB.updateAction}" title="Salvar" immediate="true">
										<h:graphicImage value="../img/btnSalvar.png" styleClass="botao"/>
									</h:commandLink>
								</div>
								</td>
								<td width="6%">
								<div align="center">
									<h:commandLink action="#{brindeUpdateDeleteMB.clearAction}" immediate="true">
										<h:graphicImage value="../img/btnLimpar.png" styleClass="botao"/>
									</h:commandLink>
								</div>
								</td>
								<td width="82%"></td>
								<td width="6%">
								<div align="center"><h:outputLink value="listaBrindes.img" onclick="#{rich:component('editar')}.hide()"
									title="Fechar">
									<h:graphicImage value="../img/btnFechar.png"
										style="margin-right: 10px; border:0"/>
								</h:outputLink></div>
								</td>
							</tr>
						</table>
							<rich:panel header="Editar Brinde">
								<h:panelGrid columns="1">
									<h:outputText value="Vículado a:" />
									<h:selectOneMenu id="cmbVinculos"
										value="#{brindeUpdateDeleteMB.brindeT.idbrinde}">
										<f:selectItems value="#{brindeUpdateDeleteMB.itens}" />
									</h:selectOneMenu>
									<h:outputText value="Descricao" />
									<h:inputText
										value="#{brindeUpdateDeleteMB.brindeT.dsbrinde}" id="editarDescricao" rendered="true" immediate="true"/>
								</h:panelGrid>
							</rich:panel>
						</a4j:form>
					</f:view>
				</rich:modalPanel>
				<!--		==============================  FIM Visao Modal EDITAR DA PAGINA  =================================== -->
	
	
				<!--		==============================  Visao Modal NOVO DA PAGINA  =================================== -->
				<rich:modalPanel width="650" height="300" id="novoPanel">
				  <f:view>
					<f:facet name="header">
						<h:panelGroup>
							<h:outputText value="Inserção de Brinde"
								styleClass="topotable" />
						</h:panelGroup>
					</f:facet>
					<f:facet name="controls">
						<rich:componentControl for="novo" attachTo="hidelink"
							operation="hide" event="onclick" />
					</f:facet>
					<a4j:form>
					<table width="100%" border="0" cellspacing="1" cellpadding="0">
						<tr>
							<td width="6%">
							<div align="center">
								<a4j:commandLink action="#{brindeInsertMB.insertAction}"  ignoreDupResponses="true">
									<h:graphicImage value="../img/btnSalvar.png" styleClass="botao"/>
								</a4j:commandLink>
							</div>
							</td>
							<td width="6%">
							<div align="center"></div>
							</td>
							<td width="82%"></td>
							<td width="6%">
							<div align="center">
							<h:outputLink onclick="#{rich:component('novo')}.hide()" value="listaBrindes.img" title="Fechar">
								<h:graphicImage value="../img/btnFechar.png"
									style="margin-right: 10px; border:0" />
							</h:outputLink>
							</div>
							</td>
						</tr>
					</table>
						<rich:panel header="Novo Brinde">
							<h:panelGrid columns="1">
								<h:outputText value="Vículado a:" />
								<h:selectOneMenu id="cmbVinculosNovo"
									value="#{brindeInsertMB.brindeTPai.idbrinde}">
									<f:selectItems value="#{brindeInsertMB.itens}" />
								</h:selectOneMenu>
								<h:outputText value="Descricao" />
								<h:inputText
									value="#{brindeInsertMB.brindeT.dsbrinde}" size="30" />
							</h:panelGrid>
						</rich:panel>
					</a4j:form>
				  </f:view>
				</rich:modalPanel>
				<!--		==============================  FIM Visao Modal NOVO DA PAGINA  =================================== -->			
	</ui:define>
</ui:composition>
T

Manage Bean Insert:

public class BrindeInsertMB extends ManagerBeanbase {

	// Atributos e propriedades
	private BrindeT brindeT = new BrindeT();
	private BrindeT brindeTPai;
	private Seg_loginT login = null;
	private List<SelectItem> itens = new ArrayList();
	
	public void setBrindeT(BrindeT brindeT) {
		this.brindeT = brindeT;
	}

	public BrindeT getBrindeT() {
		return brindeT;
	}

	/**
	 * Instancia a classe da regra de neg?cio
	 */
	public BrindeBL getBusinessClass() throws Exception {
		setLogin((Seg_loginT) getSession().getAttribute(
				SystemBusinessBaseAdministrativo.LOGIN_SESSION));
		return (BrindeBL) BusinessBase.getBusinessFactory(login.getCdlogin(),
				"br.com.imagemempresarial.bl.BrindeBL");
	}

	// M?todos de Eventos
	public String insertAction() throws Exception {
		try {
			BrindeBL classBL = getBusinessClass();
			brindeTPai= (BrindeT) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("brindeT");
			brindeT.setFlativo(1);
			brindeT.setIdbrindevinculado(brindeTPai.getIdbrinde());
			brindeT.setIdempresa(login.getIdempresa());
			classBL.insert(brindeT);

			clearAction();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public String clearAction() throws Exception {

		brindeT = new BrindeT();
		return null;
	}

	public Seg_loginT getLogin() {
		return login;
	}

	public void setLogin(Seg_loginT login) {
		this.login = login;
	}

	public List<SelectItem> listaBrindeVinculado() throws Exception {
		  try {
			  	BrindeBL brindeBL = getBusinessClass();
				 if (brindeT == null || brindeT.getDsbrinde() == null) {
					 	brindeT = new BrindeT();
					 	brindeT.setIdbrindevinculado(-1);
				 } 
				 brindeT.setIdempresa(login.getIdempresa());
				 brindeT.setFlativo(1);
			  	List<BrindeT>listTemp = brindeBL.getListaBrinde(brindeT);
			  	itens.add(new SelectItem("----Tipo Vinculado---",null));
				 for (int i = 0; i < listTemp.size(); i++) 
						itens.add(new SelectItem(listTemp.get(i).getIdbrinde(), listTemp.get(i).getDsbrinde()));
				 setItens(itens);
				return itens;
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
				System.out.println("Erro ao listar");
				return null;
			}
	}

	public List<SelectItem> getItens() throws Exception {
		if (itens.isEmpty())
			listaBrindeVinculado();	
		return itens;
	}

	public void setItens(List<SelectItem> itens) {
		this.itens = itens;
	}

	public BrindeT getBrindeTPai() {
		return brindeTPai;
	}

	public void setBrindeTPai(BrindeT brindeTPai) {
		this.brindeTPai = brindeTPai;
	}
}
lionels

dae cara conseguiu resolver o problemas ? é um erro de javascript não é …
eu testei um componente do richfaces chamado <rich:componentControl > mas nã tive sucesso .
dae uma luz ae…

G

eu tive um problema parecido, use o ajaxkeys na datatable, ele serve como indexador da tabela…
um exemplo

ou vc pode passar parametros na tabela, com o valor da chave por exemplo, e chamar um metodo no botao de abrir o modal, que pegue o valor do parametro e atribua ao objeto correto.

n tive mto tempo pra olhar o seu codigo, mas em ambos os casos, é necessario que voce chame um metodo para popular os objetos q serao exibidos no modal…

febatata

Cara. Acho que é um pouco tarde.

Mas pelo que pude perceber… o erro está nesse monte de a4j:form que voce colocou!

Criado 23 de dezembro de 2008
Ultima resposta 4 de ago. de 2009
Respostas 5
Participantes 4