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

_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to