HtmlAjaxSupport para componente do RichFaces

1 resposta
marcelbonnet

Olá, pessoal. Fiz uma página jsp com um componente rich:panelMenu, populado por meio de um binding, e quero adicionar nesse mesmo código o suporte ajax para que qualquer item clicado atualize um a4j:outputPanel .
O problema é que sempre que um item é clicado ocorre o mesmo erro: javax.el.ELException: AjaxUpdate component not found for id :formStore:null
O meu h:form tem a id formStore na minha página JSF. Independente de qual nome do outputPanel que eu especifique, ou mesmo que não especifique, essa mensagem é mostrada, como se não localizasse o ouputPanel do ajax.

A classe que faz o binding com o componente rich:panelMenu :

public HtmlPanelMenu getMenuComponent() {
....
HtmlPanelMenuGroup group = new HtmlPanelMenuGroup();
HtmlAjaxSupport ajaxSupport = new HtmlAjaxSupport();
		ajaxSupport.setEvent("onclick");
		ajaxSupport.setReRender(":formStore:outputPanelModelos");
		group.getChildren().add(ajaxSupport);
		menuComponent.getChildren().add(group);
...

Desconsiderando esse problema, a página e o componente estão funcioando perfeitamente.
Agradeço qualquer ajuda.

1 Resposta

marcelbonnet

Complementando:

a página é template.jsp :

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk"%>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>

<f:view>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<jsp:include page="/System/header.jsp"></jsp:include>
<h:form id="formStore">
		<h:panelGrid id="mainPanel" style="vertical-align: top;" columns="2" ><%--columnClasses="gridContent"--%>
			<rich:column style="vertical-align:top; border-style: none;">
				<rich:panelMenu  binding="#{menuBean.menuComponent}" style="width:200px;" ><!-- mode="ajax" -->
					
				</rich:panelMenu>
			
			</rich:column>
			<rich:column style="vertical-align:top; border-style: none;">
			<rich:panel id="panelItens" bodyClass="inpanelBody" style="width:100%">
				<a4j:outputPanel id="outputPanelModelos"><!-- ajaxRendered="true" associado ao mode=ajax me causa o problema de atualizar a págia inteira quando o ajax commando button deste painel é clicado-->
					<h:outputText value="Modelos existentes para #{panelMenu.current}" id="current" />
						<rich:dataTable value="#{panelMenu.modelos}" var="modelo" id="tableModelos" width="100%">
							<rich:column>
	                           
								<h:graphicImage value="/img/store/#{modelo.imagem}"></h:graphicImage>
							</rich:column>
							<rich:column>
								<h:outputText value="#{modelo.nome}"></h:outputText>
							</rich:column>
							<rich:column>
								<h:outputText value="#{modelo.modelo}"></h:outputText>
							</rich:column>
							<rich:column>
								<h:outputText value="#{modelo.fabricante.nome}"></h:outputText>
							</rich:column>
							<rich:column>
							
							
								
							<a4j:region>
								<a4j:commandButton type="button"  image="/img/store/carrinho.gif"  value="Reservar" action="#{sessionCartBean.addToCart}">
									<a4j:actionparam assignTo="#{sessionCartBean.modeloId }" value="#{modelo.id}" name="modeloId"></a4j:actionparam>
									<a4j:support event="onclick" reRender="outputLastItem">
										
									</a4j:support>
								</a4j:commandButton>
							</a4j:region>
								
								
								
							</rich:column>
						</rich:dataTable>
				</a4j:outputPanel>
			</rich:panel>
			</rich:column>
		</h:panelGrid>
		
		
</h:form>
</body>
</html>
</f:view>

O Managed bean :

package br.gov.xxxxxxx.managedbean.html;

import java.util.Date;
import java.util.List;

import javax.el.ValueExpression;
import javax.faces.application.Application;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.naming.NamingException;

import org.ajax4jsf.component.html.HtmlAjaxSupport;
import org.ajax4jsf.event.AjaxEvent;
import org.ajax4jsf.event.AjaxListener;
import org.ajax4jsf.taglib.html.jsp.AjaxSupportTag;
import org.apache.myfaces.custom.updateactionlistener.UpdateActionListener;
import org.richfaces.component.html.HtmlPanelMenu;
import org.richfaces.component.html.HtmlPanelMenuGroup;
import org.richfaces.component.html.HtmlPanelMenuItem;

import br.gov.xxxxxxx.entity.CategoriaPojo;
import br.gov.xxxxxxx.managedbean.HelperCategoriaBean;
import br.gov.xxxxxxx.persistence.exception.JcifPersistenceException;

public class SubCategoriasMenuBean implements AjaxListener{

	private HtmlPanelMenu menuComponent;
	private int parentId;
	
	private static List<CategoriaPojo> subCategorias;

	public String loadMenu(){
		
		return "store";
	}
	
	public HtmlPanelMenu getMenuComponent() {
		
		menuComponent = null;
		HtmlPanelMenuGroup group = new HtmlPanelMenuGroup();
		group.setLabel("SubCategorias");
		group.setId("groupId_01");
		group.setExpanded(true);
		
		if (menuComponent == null) 
			menuComponent = new HtmlPanelMenu();
		menuComponent.setId("menuCategorias");
		
		System.out.println("subcateg: " + getParentId());
		if(getParentId() == 0)
			return new HtmlPanelMenu();
		
		FacesContext context = FacesContext.getCurrentInstance();
		Application application = context.getApplication();
		
		try {
			subCategorias = new HelperCategoriaBean().listarSubCategorias(getParentId());
		} catch (JcifPersistenceException e) {
			e.printStackTrace();
		} catch (NamingException e) {
			e.printStackTrace();
		}

		for(CategoriaPojo c : subCategorias){
			HtmlPanelMenuItem item = new HtmlPanelMenuItem();
 application.createComponent(HtmlPanelMenuItem.COMPONENT_TYPE);
			item.setId("itemId_"+c.getId());
			item.setLabel(c.getCategoria());
			item.setRendered(true);
			Class[] params = {};
			ValueBinding propriedade = application.createValueBinding("#{panelMenu.current}");
			ValueBinding v = application.createValueBinding(c.getCategoria());
			UpdateActionListener u = new UpdateActionListener();
			u.setPropertyBinding(propriedade);
			u.setValueBinding(v);
			item.addActionListener(u);
			
			ValueBinding p2 = application.createValueBinding("#{panelMenu.subCategoriaId}");
			ValueBinding v2 = application.createValueBinding(String.valueOf(c.getId()));
			UpdateActionListener u2 = new UpdateActionListener();
			u2.setPropertyBinding(p2);
			u2.setValueBinding(v2);
			item.addActionListener(u2);
			
			
			group.getChildren().add(item);
		}
		
		HtmlAjaxSupport ajaxSupport = new HtmlAjaxSupport();
		ajaxSupport.setEvent("onclick");
		ajaxSupport.setReRender(":formStore:outputPanelModelos");
		
		group.getChildren().add(ajaxSupport);
		
		menuComponent.getChildren().add(group);
		menuComponent.setSelectedChild("itemId_"+subCategorias.get(0).getId());
		
		
		
		
		
		
		return menuComponent;
	}
	
	
	public void setMenuComponent(HtmlPanelMenu menuComponent) {
		this.menuComponent = menuComponent;
	}


	


	/**
	 * @return the parentId
	 */
	public int getParentId() {
		return parentId;
	}


	/**
	 * @param parentId the parentId to set
	 */
	public void setParentId(int parentId) {
		this.parentId = parentId;
	}
	
	

}

Espero que isso ajude alguém a me ajudar!

Criado 2 de outubro de 2008
Ultima resposta 3 de out. de 2008
Respostas 1
Participantes 1