[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