Error SelectOneMenu

176 views
Skip to first unread message

Roan Brasil Monteiro

unread,
Aug 20, 2009, 1:16:48 PM8/20/09
to jav...@googlegroups.com
Está dando esse erro, alguém pode me dizer o porque? O State tem que vim vazio pois é um combobox aninhado com Country e Cidade...

12:08:34,922 ERROR [viewhandler] Error Rendering View[/page/user2.xhtml]
java.lang.IllegalArgumentException: Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(state).  Found null.
    at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:326)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:814)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:280)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
    at org.jboss.seam.ui.util.cdk.RendererBase.renderChild(RendererBase.java:190)
    at org.jboss.seam.ui.util.cdk.RendererBase.renderChildren(RendererBase.java:166)
    at org.jboss.seam.ui.renderkit.ValidateAllRendererBase.doEncodeChildren(ValidateAllRendererBase.java:33)
    at org.jboss.seam.ui.util.cdk.RendererBase.encodeChildren(RendererBase.java:92)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at org.jboss.seam.ui.util.cdk.RendererBase.renderChild(RendererBase.java:186)
    at org.jboss.seam.ui.util.cdk.RendererBase.renderChildren(RendererBase.java:166)
    at org.jboss.seam.ui.renderkit.DecorateRendererBase.doEncodeChildren(DecorateRendererBase.java:152)
    at org.jboss.seam.ui.util.cdk.RendererBase.encodeChildren(RendererBase.java:92)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:234)
    at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:180)
    at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:127)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
    at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
    at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:220)
    at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:215)
    at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:121)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
    at org.jboss.portletbridge.lifecycle.RenderResponsePhase.executePhase(RenderResponsePhase.java:58)
    at org.jboss.portletbridge.lifecycle.LifecyclePhase.execute(LifecyclePhase.java:72)
    at org.jboss.portletbridge.lifecycle.PortletLifecycle.render(PortletLifecycle.java:155)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:532)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
    at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
    at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
12:08:35,000 INFO  [STDOUT] Hibernate:
    select

--
Atenciosamente,

Roan Brasil Monteiro
http://roanbrasil.wordpress.com/

Felipe Ribas Forbeck

unread,
Aug 20, 2009, 1:45:46 PM8/20/09
to javasf: JavaServer Faces International Group
ta falando que vc precisa de um componente filho que seja um
UISelectItem/UISelectItems, para usar o selectOne...
coloca o codigo ae.!

Roan Brasil Monteiro

unread,
Aug 20, 2009, 2:29:28 PM8/20/09
to jav...@googlegroups.com
package com.citespace.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import javax.ejb.Stateless;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;


import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.faces.FacesMessages;

import com.citespace.Conversor;
import com.citespace.bean.interfaces.IPlaceBean;
import com.citespace.cms.model.Country;
import com.citespace.cms.model.State;
import com.citespace.cms.model.Town;
//import com.citespace.cms.model.dao.PlaceDAO;
import com.citespace.cms.model.User;


@Stateless
@Name("placeBean")
public class PlaceBean implements IPlaceBean, Serializable {

    /**
     *
     */
    private static final long serialVersionUID = -3110047259054325262L;
    @In(create=true)
    private User user;
    @In(create=true)
    private Town town;
    @In(create=true)
    private Country country;
    @In(create=true)
    private static State state;
   
    private List<SelectItem> states;
    private String verifyPassword;
   
    @PersistenceContext(unitName="citespace-jpa")
    private EntityManager citespaceEntityManager;

    @In
    private FacesMessages facesMessages;
   
    public void save(){
        System.out.printf("Salvo com sucesso!!! Para user %s ", user);
    }
   
    @SuppressWarnings("unchecked")
    public List<SelectItem> getAllCountries(){
       
        Query q = citespaceEntityManager.createQuery("select c from Country c order by c.name");
       
        List<Country> countriesList =  q.getResultList();       
        List<SelectItem> itens = new ArrayList<SelectItem>(countriesList.size());
       
        for( Country c: countriesList){
            itens.add(new SelectItem(c, c.getName()));
        }
        return itens;
       
    }
   
    @SuppressWarnings("unchecked")
    public List<SelectItem> getStatesByCountry(Long countryId){
        Query q = citespaceEntityManager.createQuery("select s from State s Join s.country c Where c.id = :countryId order by s.name ");
        q.setParameter("countryId", countryId);
        List<State> statesList = q.getResultList();
        List<SelectItem> itens = new ArrayList<SelectItem>(statesList.size());
       
        for( State s: statesList){
            itens.add(new SelectItem(s, s.getName()));
        }
        return itens;
    }
   
    @SuppressWarnings("unchecked")
    public List<SelectItem> getStatesByTown(Long townId){       
        Query q = citespaceEntityManager.createQuery("select s from State s Join s.country c Where c.id = :countryId order by s.name ");
        q.setParameter("countryId", town.getCountry().getId());
        //State Query Result List
        List<State> statesList = q.getResultList();
        List<SelectItem> itens = new ArrayList<SelectItem>(statesList.size());
       
        for( State s: statesList){
            itens.add(new SelectItem(s, s.getName()));
        }
        return itens;
    }
   
    public String actionLoadStates(){       
        this.states = getStatesByCountry(town.getCountry().getId());
        return "SUCCESS";
    }
   
    public String actionLoadStatesBySuggestionBox(){               
        this.states = getStatesByTown(town.getId());
        return "SUCCESS";
    }
   
    public List<SelectItem> getStates() {
        return states;
    }

    public void setStates(List<SelectItem> states) {
        this.states = states;
    }
   
    @SuppressWarnings("unchecked")
    public List<Town> suggestionTown(Object o){
        final String prefix = o.toString().trim();
        Query q = citespaceEntityManager.createQuery("select t from Town t where t.name like :prefix order by t.name ");           
        q.setMaxResults(40);
        q.setParameter("prefix", prefix + "%");               
        List<Town> townList = q.getResultList();

        return townList;

    }
   
    public javax.faces.convert.Converter getConverter(){
        return new Conversor(this.states);
    }
   
    /*
     * (non-Javadoc)
     * @see com.citespace.bean.UserBeanRemote#getVerifyPassword
     */
    public String getVerifyPassword() {
        return verifyPassword;
    }

    /*
     * (non-Javadoc)
     * @see com.citespace.bean.UserBeanRemote#setVerifyPassword(java.lang.String)
     */
    public void setVerifyPassword(String verifyPassword) {
        this.verifyPassword = verifyPassword;
    }
}





<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:s="http://jboss.com/products/seam/taglib"
    template="../layout/citespacetemplate.xhtml">   
    <ui:define name="body">
       
        <h:panelGroup id="messagesArea">
            <h:messages id="globalMensagens" globalOnly="true" styleClass="message" style="color: red;"> </h:messages>           
        </h:panelGroup>
           
        <h:form id="addUserForm" styleClass="edit">
       
         <rich:panel>       
            <f:facet name="header">User Registration:</f:facet>
            <h:panelGrid >
                       
                <s:decorate id="usernameDecoration" template="../layout/edit_register.xhtml">
                  <ui:define name="label">Username :</ui:define>
                  <h:inputText value="#{user.username}"
                                 id="username"
                                 label="username"
                                 required="true"
                                 size="15"
                                 maxlength="20"                                
                                 />                                
                </s:decorate>   
               
                                       
                <s:decorate id="passwordDecoration" template="../layout/edit_register.xhtml">
                    <ui:define name="label">Password :</ui:define>
                    <h:inputSecret value="#{user.password}"
                                   id="password"
                                   label="password"
                                   required="true"
                                   size="15"
                                        maxlength="20" />
                </s:decorate>
               
               
                <s:decorate id="retypePasswordDecoration" template="../layout/edit_register.xhtml">
                    <ui:define name="label">Retype Password :</ui:define>
                    <h:inputSecret value="#{placeBean.verifyPassword}"
                                   id="verify"
                                   label="verify"
                                   required="true"
                                   size="15"
                                        maxlength="20" />
                </s:decorate>
                                       
                                       
                <s:decorate id="emailDecoration" template="../layout/edit_register.xhtml">
                    <ui:define name="label">Email Address :</ui:define>
                    <h:inputText value="#{user.email}"
                                 id="email"
                                 label="email"
                                 required="true"
                                 size="15"
                                      maxlength="25"
                                      />                                      
                </s:decorate>
                   
                <s:decorate id="firstnameDecoration" template="../layout/edit_register.xhtml">
                    <ui:define name="label">First Name :</ui:define>
                    <h:inputText value="#{user.firstname}"
                                 id="firstname"
                                 label="firstname"
                                 required="true"
                                 size="15"
                                      maxlength="25" />
                </s:decorate>   

                <s:decorate id="lastnameDecoration" template="../layout/edit_register.xhtml">
                    <ui:define name="label">Last Name :</ui:define>
                    <h:inputText value="#{user.lastname}"
                                 id="lastname"
                                 label="lastname"
                                 required="true"
                                 size="15"
                                      maxlength="25" />
                </s:decorate>                                   
                   
                <s:decorate id="townDecoration" template="../layout/edit.xhtml">
                    <ui:define name="label">City :</ui:define>
                    <h:inputText value="#{town.name}"
                                 id="town"
                                 label="town"                                  
                                 size="25"
                                      maxlength="200"
                                      var="townName"
                                      required="true"
                                      rendered="true"                                      
                                      >                                                                                                                                                                                                                                                                                                       
                      </h:inputText>                                                                             
                    <rich:suggestionbox id="suggestion"
                                        for="town"
                                        suggestionAction="#{placeBean.suggestionTown}"
                                           width="200"
                                           height="100"
                                           var="result"
                                           minChars="3"
                                           fetchValue="#{result.name}"
                                           reRender="state, country"
                                           rendered="true"
                                           ajaxSingle="true"                                                                                                                                                                                                                                                                                                          
                                           >
                           <h:column>
                               <h:outputText value="#{result.name},#{result.state.name},#{result.country.name}" id="output" rendered="true">
                               </h:outputText>
                        </h:column>
                        <a4j:support event="onselect"                                                                           
                                     action="#{placeBean.actionLoadStatesBySuggestionBox}"
                                     reRender="country,state"
                                     ajaxSingle="true" 
                                     rendered="true"
                                     >                                     
                            <f:setPropertyActionListener
                                    value="#{result}"
                                    target="#{town}" />
                            <f:setPropertyActionListener
                                    value="#{result.country}"
                                    target="#{country}" />
                            <f:setPropertyActionListener
                                    value="#{result.state}"
                                    target="#{state}" />                                                                                       
                        </a4j:support>                    
                    </rich:suggestionbox>
                </s:decorate>
               
                <s:decorate id="countryDecoration" template="../layout/edit_register.xhtml" rendered="true">
                    <ui:define name="label">Country :</ui:define>
                    <h:selectOneMenu value="#{country}"
                                     id="country"                                                                          
                                     rendered="true"
                                     required="true"                                                                                                                                                                                                                                                                                                         
                                     >                               
                            <f:selectItems value="#{placeBean.allCountries}" />                                                                                                                                                                                                
                    </h:selectOneMenu>                   
                </s:decorate>   
                               
                <s:decorate id="stateDecoration" template="../layout/edit_register.xhtml" rendered="true">
                    <ui:define name="label">State :</ui:define>                   
                    <h:selectOneMenu value="#{state}"
                                     id="state" required="true"
                                     converter="#{placeBean.converter}"                                                                                                                                                                                                                                                                                                                            
                                     >   
                        <f:selectItem itemLabel="--Select a state --" itemValue=""/>                                                                                                             
                        <f:selectItems value="#{placeBean.states}"  />                                                                                                                                                                                
                    </h:selectOneMenu>                                                           
                </s:decorate>                                                                                                                               
                       
                <s:decorate id="buttonDecoration" template="../layout/edit_register.xhtml">                   
                    <h:commandButton action="#{placeBean.save()}"  value="Register" />                                       
                </s:decorate> 
                </h:panelGrid>                     
            </rich:panel>

        </h:form>
    </ui:define>
</ui:composition>




2009/8/20 Felipe Ribas Forbeck <ffor...@gmail.com>

João Miguel

unread,
Aug 20, 2009, 3:02:34 PM8/20/09
to jav...@googlegroups.com

 Para popular o SelectOne o que você está fazendo?

 
2009/8/20 Felipe Ribas Forbeck <ffor...@gmail.com>

--
=========================
ALJUG - Alagoas Java User Group
http://aljug.dev.java.net/
Fundador ALJUG
João Miguel - JUG Leader
Desenvolvedor JSF
=========================

Felipe Ribas Forbeck

unread,
Aug 20, 2009, 3:08:26 PM8/20/09
to javasf: JavaServer Faces International Group
coloca o código do selectOne..

On 20 ago, 16:02, João Miguel <miguelcpj...@gmail.com> wrote:
>  Para popular o SelectOne o que você está fazendo?
>
> 2009/8/20 Felipe Ribas Forbeck <fforb...@gmail.com>
> ALJUG - Alagoas Java User Grouphttp://aljug.dev.java.net/

Roan Brasil Monteiro

unread,
Aug 20, 2009, 3:24:19 PM8/20/09
to jav...@googlegroups.com
então state vem vazio só vai ser carregado a partir do momento que que selecionar um país específico...

2009/8/20 João Miguel <miguel...@gmail.com>

Roan Brasil Monteiro

unread,
Aug 20, 2009, 3:25:22 PM8/20/09
to jav...@googlegroups.com
2009/8/20 Felipe Ribas Forbeck <ffor...@gmail.com>

Luiz Felipe

unread,
Aug 21, 2009, 12:24:05 PM8/21/09
to javasf: JavaServer Faces International Group
Bom o erro é porque você está passando para o componente selectOneMenu
um objeto null, você precisa inicializar a sua lista de SelectItem
antes de passa ela para o componente... acho que isso deve resolver:

@Stateless
@Name("placeBean")
public class PlaceBean implements IPlaceBean, Serializable {

/**
*
*/
private static final long serialVersionUID =
-3110047259054325262L;
@In(create=true)
private User user;
@In(create=true)
private Town town;
@In(create=true)
private Country country;
@In(create=true)
private static State state;

private List<SelectItem> states = new arrayList<SelectItem>(); //
inicializa a lista de selectItem
...

Luiz Felipe

unread,
Aug 21, 2009, 12:03:35 PM8/21/09
to javasf: JavaServer Faces International Group
bom seu problema parece ser porque você não inicializou a sua lista de
selectItens... vc não pode passar um objeto null para o componente...
para resolver isso acredito que basta vc instanciar a sua lista, por
exemplo, assim:

@Stateless
@Name("placeBean")
public class PlaceBean implements IPlaceBean, Serializable {

/**
*
*/
private static final long serialVersionUID =
-3110047259054325262L;
@In(create=true)
private User user;
@In(create=true)
private Town town;
@In(create=true)
private Country country;
@In(create=true)
private static State state;

private List<SelectItem> states = new arrayList<SelecItem>(); //
inicializando a lista de selectItens que é usada para montar o
selectOneMenu

...

Roan Brasil Monteiro

unread,
Aug 21, 2009, 1:28:33 PM8/21/09
to jav...@googlegroups.com
Mas Luis eu faço isso no construtor

2009/8/21 Luiz Felipe <lufeli...@yahoo.com.br>

Roan Brasil Monteiro

unread,
Aug 21, 2009, 1:29:28 PM8/21/09
to jav...@googlegroups.com
eu to tentando fazer um combobox aninhado mas to perdido tbm na questão de usar stateless ou combinação do stateful com algum contexto... pois quero q depois de cadastrado o formulario fique limpo.

2009/8/21 Luiz Felipe <lufeli...@yahoo.com.br>
Reply all
Reply to author
Forward
0 new messages