[jboss-user] [JBoss Seam] - selectItems+ajax4jsf

gllambi do-not-reply at jboss.com
Thu Dec 7 11:25:44 EST 2006


I'm trying the new selectItems tag and had some problems with it when I tried to use it with ajax4jsf. 

I have two combos boxes. When the first is changed, the second one must refresh with new values. The problem is that when the first combo changes a Ilegal State Exception occurs. 

Here is the jsp


  | <h:panelGrid id="panelGrid" columns="2">
  | 	<h:outputText id="etiquetaUsuario" value="#{msg.socio}" />
  | 	<s:decorate>
  | 		<h:inputText id="inputUsuario" value="#{cliente.usuario}" size="30">
  | 			<a4j:support id="soporteAjaxUsuario" event="onblur"
  | 				reRender="errorUsuario" />
  | 		</h:inputText>
  | 		<a4j:outputPanel id="errorUsuario" styleClass="error">
  | 			<s:message id="mensajeErrorUsuario" />
  | 		</a4j:outputPanel>
  | 	</s:decorate>
  | 	<h:outputText id="etiquetaContraseña" value="#{msg.contraseña}" />
  | 	<s:decorate>
  | 		<h:inputText id="inputContraseña" value="#{cliente.pwd}" size="30">
  | 			<a4j:support id="soporteAjaxContraseña" event="onblur"
  | 				reRender="errorPassword" />
  | 		</h:inputText>
  | 		<a4j:outputPanel id="errorPassword" styleClass="error">
  | 			<s:message id="mensajeErrorContraseña" />
  | 		</a4j:outputPanel>
  | 	</s:decorate>
  | 	<h:outputText id="etiquetaPais" value="#{msg.pais}" />
  | 	<h:selectOneMenu id="seleccionarPais"
  | 		converter="#{registro.countryConverter}" required="true"
  | 		value="#{cliente.country}">
  | 		<si:selectItems value="#{paises}" var="pais"
  | 			label="#{pais.countryCode}"
  | 			noSelectionLabel="#{msg.selecionePais}" hideNoSelection="true"></si:selectItems>
  | 		<a4j:support id="soporteAjaxPais" event="onchange"
  | 			reRender="seleccionarEstado" />
  | 	</h:selectOneMenu>
  | 	<h:outputText id="etiquetaEstado" value="#{msg.estado}" />
  | 	<h:selectOneMenu id="seleccionarEstado"
  | 		converter="#{registro.stateConverter}" value="#{cliente.state}"
  | 		required="true">
  | 		<si:selectItems value="#{estados}" var="estado"
  | 			label="#{estado.stateCode}"
  | 			noSelectionLabel="#{msg.seleccioneEstado}" hideNoSelection="true"></si:selectItems>
  | 	</h:selectOneMenu>
  | </h:panelGrid>
  | <a4j:commandButton id="botonAjax" value="Ajax #{msg.registrarse}"
  | 	action="#{registro.registrarse}"
  | 	reRender="formRegistro:mensajesErrorPanel"></a4j:commandButton>
  | 

Here is the bean asociated with the page.


  | /**
  |  * 
  |  */
  | package org.seam.ejemplo.validaciones.session;
  | 
  | import java.util.List;
  | 
  | import javax.ejb.Stateless;
  | import javax.faces.convert.Converter;
  | import javax.persistence.EntityManager;
  | import javax.persistence.PersistenceContext;
  | 
  | import org.jboss.seam.ScopeType;
  | import org.jboss.seam.annotations.Factory;
  | import org.jboss.seam.annotations.In;
  | import org.jboss.seam.annotations.Logger;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Scope;
  | import org.jboss.seam.core.FacesMessages;
  | import org.jboss.seam.log.Log;
  | import org.jboss.seam.selectitems.jsf.EntityConverter;
  | import org.seam.ejemplo.validaciones.beans.Cliente;
  | import org.seam.ejemplo.validaciones.beans.Country;
  | import org.seam.ejemplo.validaciones.beans.State;
  | 
  | /**
  |  * @author gllambi
  |  * 
  |  */
  | @Stateless
  | @Name("registro")
  | @Scope(ScopeType.EVENT)
  | public class RegistroImpl implements Registro {
  | 
  | 	@PersistenceContext
  | 	private EntityManager em;
  | 
  | 	@Logger
  | 	private Log log;
  | 
  | 	@In
  | 	private Cliente cliente;
  | 
  | 	public String registrarse() {
  | 		log.info("Registrando al cliente...");
  | 		List existing = em.createQuery(
  | 			"select usuario from Cliente where usuario=:usuarioParam")
  | 			.setParameter("usuarioParam", cliente.getUsuario())
  | 			.getResultList();
  | 		
  | 		if (!existing.isEmpty()) {
  | 			log.info("Ya existe!");	
  | 			FacesMessages.instance().add("El usuario ya existe: #{cliente.usuario}");
  | 			return null;
  | 			
  | 		}else{
  | 			em.persist(cliente);
  | 			log.info("Se registró un cliente nuevo: #{cliente.usuario} #{cliente.pwd}");
  | 			return "exito";
  | 		}
  | 	}
  | 
  | 	@Factory("paises")
  | 	public List obtenerPaises() {
  | 		List paises = em.createQuery("from Country").getResultList();
  | 		log.info("Hay "+paises.size()+" países.");
  | 		return paises;
  | 	}
  | 	
  | 	public void cambiarEstados(){
  | 		log.info("Cambio los estados");
  | 	}
  | 	
  | 	@Factory("estados")
  | 	public List obtenerEstados() {
  | 		List estados;
  | 		if ((cliente!= null)&&(cliente.getCountry()!=null)){
  | 			estados = em.createQuery("from State where country_id=:countryParam").
  | 			setParameter("countryParam", cliente.getCountry().getCountryId()).getResultList();
  | 			log.info("Hay "+estados.size()+" estados.");
  | 		}
  | 		else estados = em.createQuery("from State").getResultList();
  | 		return estados;
  | 	}
  | 	
  | 	public Converter getCountryConverter() {
  | 		return new EntityConverter<Country>(){
  | 			@Override
  | 			protected Object getIdAsObject(String id, Class arg1) {
  | 				return Integer.valueOf(id);
  | 			}
  | 
  | 			@Override
  | 			protected String getIdAsString(Country entity) {
  | 				return String.valueOf(entity.getCountryId());
  | 			}
  | 
  | 		};
  | 	}
  | 
  | 	public Converter getStateConverter() {
  | 		return new EntityConverter<State>(){
  | 			@Override
  | 			protected Object getIdAsObject(String id, Class clazz) {
  | 				return Integer.valueOf(id);
  | 
  | 			}
  | 
  | 			@Override
  | 			protected String getIdAsString(State entity) {
  | 				return String.valueOf(entity.getStateId());
  | 			}
  | 		}; 
  | 	}
  | 	
  | }
  | 

Here is the log


  | 2006-12-07 16:19:52,431 DEBUG [org.ajax4jsf.framework.renderer.AjaxContainerRenderer] Render Ajax Area component with ID :formRegistro:seleccionarEstado
  | 2006-12-07 16:19:52,431 DEBUG [org.jboss.seam.jsf.SeamVariableResolver] resolving name: registro
  | 2006-12-07 16:19:52,431 ERROR [org.apache.myfaces.lifecycle.PhaseListenerManager] Exception in PhaseListener RENDER_RESPONSE(6) afterPhase
  | javax.faces.el.EvaluationException: Cannot get value for expression '#{registro.stateConverter}'
  | 	at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:402)
  | 	at javax.faces.component.UIOutput.getConverter(UIOutput.java:65)
  | 	at org.jboss.seam.selectitems.ui.UISeamSelectItems.addConverters(UISeamSelectItems.java:297)
  | 	at org.jboss.seam.selectitems.ui.UISeamSelectItems.getValue(UISeamSelectItems.java:192)
  | 	at org.apache.myfaces.shared_impl.util.SelectItemsIterator.hasNext(SelectItemsIterator.java:102)
  | 	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.internalGetSelectItemList(RendererUtils.java:477)
  | 	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getSelectItemList(RendererUtils.java:453)
  | 	at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:277)
  | 	at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:251)
  | 	at org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:54)
  | 	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:536)
  | 	at org.ajax4jsf.framework.renderer.RendererBase.renderChild(RendererBase.java:249)
  | 	at org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjaxChild(AjaxContainerRenderer.java:197)
  | 	at org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjaxChild(AjaxContainerRenderer.java:190)
  | 	at org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjaxChild(AjaxContainerRenderer.java:190)
  | 	at org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjaxChild(AjaxContainerRenderer.java:190)
  | 	at org.ajax4jsf.framework.renderer.AjaxContainerRenderer.encodeAjax(AjaxContainerRenderer.java:126)
  | 	at org.ajax4jsf.framework.ajax.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:570)
  | 	at org.ajax4jsf.framework.ajax.AjaxContext.renderAjaxRegion(AjaxContext.java:260)
  | 	at org.ajax4jsf.framework.renderer.AjaxPhaseListener.afterPhase(AjaxPhaseListener.java:96)
  | 	at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersAfter(PhaseListenerManager.java:89)
  | 	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:391)
  | 	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)
  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  | 	at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:46)
  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  | 	at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:32)
  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  | 	at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:67)
  | 	at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:223)
  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  | 	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  | 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  | 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  | 	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
  | 	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
  | 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  | 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  | 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  | 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  | 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  | 	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  | 	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
  | 	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
  | 	at java.lang.Thread.run(Thread.java:595)
  | Caused by: java.lang.IllegalStateException: No application context active
  | 	at org.jboss.seam.Component.forName(Component.java:1534)
  | 	at org.jboss.seam.Component.getInstance(Component.java:1584)
  | 	at org.jboss.seam.Component.getInstance(Component.java:1567)
  | 	at org.jboss.seam.jsf.SeamVariableResolver.resolveVariable(SeamVariableResolver.java:45)
  | 	at org.apache.myfaces.config.LastVariableResolverInChain.resolveVariable(LastVariableResolverInChain.java:42)
  | 	at org.apache.myfaces.el.ValueBindingImpl$ELVariableResolver.resolveVariable(ValueBindingImpl.java:574)
  | 	at org.apache.commons.el.NamedValue.evaluate(NamedValue.java:124)
  | 	at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:140)
  | 	at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:383)
  | 	... 50 more
  | 2006-12-07 16:19:52,431 DEBUG [org.ajax4jsf.framework.DebugLifecycle] End phase RENDER_RESPONSE(6)
  | 2006-12-07 16:19:52,431 DEBUG [org.jboss.seam.util.Naming] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
  | 2006-12-07 16:19:52,431 DEBUG [org.jboss.seam.servlet.SeamExceptionFilter] ended request
  | 2006-12-07 16:19:52,431 DEBUG [org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter] Finished request processing total time 47ms for uri: /seam-validacion/view/registro.seam
  | 

Thanks a lot

Guzmán

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3991998#3991998

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3991998




More information about the jboss-user mailing list