Erro no h:SelectManyListBox

25 respostas
diogoprosoft

Galera tenho um formulário, nele tenho um h:selectManyListBox, seleciono os itens e clico em consultar o retorno vem todo certinho, depois que eu altero a seleção e clico em consultar novamente da esse erro:

AVISO: javax.el.PropertyNotFoundException: /WEB-INF/chamados/listarChamados.xhtml @91,69 itemValue="#{s.codStatus}": Property 'codStatus' not found on type java.lang.String
javax.faces.FacesException: javax.el.PropertyNotFoundException: /WEB-INF/chamados/listarChamados.xhtml @91,69 itemValue="#{s.codStatus}": Property 'codStatus' not found on type java.lang.String
	at javax.faces.component.UIComponentBase$AttributesMap.get(UIComponentBase.java:2168)
	at javax.faces.component.SelectItemsIterator$GenericObjectSelectItemIterator$GenericObjectSelectItem.updateItem(SelectItemsIterator.java:501)
	at javax.faces.component.SelectItemsIterator$GenericObjectSelectItemIterator$GenericObjectSelectItem.access$600(SelectItemsIterator.java:416)
	at javax.faces.component.SelectItemsIterator$GenericObjectSelectItemIterator.getSelectItemFor(SelectItemsIterator.java:401)
	at javax.faces.component.SelectItemsIterator$IterableItemIterator.next(SelectItemsIterator.java:664)
	at javax.faces.component.SelectItemsIterator$IterableItemIterator.next(SelectItemsIterator.java:627)
	at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:155)
	at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:64)
	at javax.faces.component.SelectUtils.matchValue(SelectUtils.java:82)
	at javax.faces.component.UISelectMany.validateValue(UISelectMany.java:597)
	at javax.faces.component.UIInput.validate(UIInput.java:941)
	at javax.faces.component.UIInput.executeValidate(UIInput.java:1189)
	at javax.faces.component.UIInput.processValidators(UIInput.java:691)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
	at javax.faces.component.UIForm.processValidators(UIForm.java:243)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1180)
	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

25 Respostas

Hebert_Coelho

dentro da classe da variável “s” você tem um getCodStatus()?

diogoprosoft

Sim tenho get e set

Hebert_Coelho

Tem como postar?

diogoprosoft

Blz

Bean

public class StatusBean implements Serializable{
	
	private String codStatus;

        private String dscStatus;
	
	public String getCodStatus() {
		return codStatus;
	}
	public void setCodStatus(String codStatus) {
		this.codStatus = codStatus;

	public String getDscStatus() {
		return dscStatus;
	}
	public void setDscStatus(String dscStatus) {
		this.dscStatus = dscStatus;

xhtml

<h:selectManyListbox id="codStatus" value="#{listarChamadosController.listaStatusBean}" styleClass="ui-inputfield ui-widget ui-state-default ui-corner-all" size="10" style="width:250px;" >			 							
	<f:selectItem itemLabel="" itemValue="" />
	<f:selectItems value="#{listarChamadosController.listaStatusBean}" var="s"
  					 itemLabel="#{s.dscStatus}" itemValue="#{s.codStatus}" />
</h:selectManyListbox>

No controller meu listStatusBean usa o bean ListStatusBean

drsmachado

Se fosse, por que o stackTrace diz que é String?

itemValue="#{s.codStatus}": Property 'codStatus' not found on type java.lang.String
diogoprosoft

Ta mais ele é String!!!

Hebert_Coelho

Houve alteração no código? Antes esse campo era int e depois virou string?

diogoprosoft

Isso sim, o campo era Integer só que existe um tratamento na procedure do banco que esse codStatus lá é String e ele pode receber vários valores que lá no banco é tratado tipo 2,5,4,3,6
Então eu alterei ele para String e pego a lista seleciona e passo para ele, mais antes guando era Integer tbm dava esse erro

Hebert_Coelho

Então pode ser algum cache/temporário no seu servidor.

Se for JBoss apague as pasta data/work/temp e inicie o servidor novamente veja se o erro persiste.

diogoprosoft

Pois é limpei o tomcat e troquei de browser mesmo assim nada.
Será que eu não teria que usar o Converter?

Hebert_Coelho

diogo soares:
Pois é limpei o tomcat e troquei de browser mesmo assim nada.
Será que eu não teria que usar o Converter?

Se os valores são apenas String, não precisa.

Trocar o browser não adianta pois o cache seria problema do servidor.

Que estranho viu cara. Bizarro.

R

Tem uma coisa errada nesse código:

&lt;h:selectManyListbox id="codStatus" value="#{listarChamadosController.listaStatusBean}" styleClass="ui-inputfield ui-widget ui-state-default ui-corner-all" size="10" style="width:250px;" &gt;                                        
        &lt;f:selectItem itemLabel="" itemValue="" /&gt;  
        &lt;f:selectItems value="#{listarChamadosController.listaStatusBean}" var="s"  
                         itemLabel="#{s.dscStatus}" itemValue="#{s.codStatus}" /&gt;  
    &lt;/h:selectManyListbox&gt;

Vc tá usando “listarChamadosController.listaStatusBean” duas vezes,no h:selectManyListBox e no f:selectItems

EDIT:me enganei,n vi q era um manylistbox.Coloca o código que monta listaStatusBean

Hebert_Coelho

raf4ever:
Tem uma coisa errada nesse código:

&lt;h:selectManyListbox id="codStatus" value="#{listarChamadosController.listaStatusBean}" styleClass="ui-inputfield ui-widget ui-state-default ui-corner-all" size="10" style="width:250px;" &gt;                                        
        &lt;f:selectItem itemLabel="" itemValue="" /&gt;  
        &lt;f:selectItems value="#{listarChamadosController.listaStatusBean}" var="s"  
                         itemLabel="#{s.dscStatus}" itemValue="#{s.codStatus}" /&gt;  
    &lt;/h:selectManyListbox&gt;

Vc tá usando “listarChamadosController.listaStatusBean” duas vezes,no h:selectManyListBox e no f:selectItems

EDIT:me enganei,n vi q era um manylistbox.Coloca o código que monta listaStatusBean


Cara, eu acho que você está certo viu. Não tem que apontar para outro cara não?
Se a outra lista for de Objetos e não Strings, aí sim terá que ter um converter.

R

jakefrog:
raf4ever:
Tem uma coisa errada nesse código:

&lt;h:selectManyListbox id="codStatus" value="#{listarChamadosController.listaStatusBean}" styleClass="ui-inputfield ui-widget ui-state-default ui-corner-all" size="10" style="width:250px;" &gt;                                        
        &lt;f:selectItem itemLabel="" itemValue="" /&gt;  
        &lt;f:selectItems value="#{listarChamadosController.listaStatusBean}" var="s"  
                         itemLabel="#{s.dscStatus}" itemValue="#{s.codStatus}" /&gt;  
    &lt;/h:selectManyListbox&gt;

Vc tá usando “listarChamadosController.listaStatusBean” duas vezes,no h:selectManyListBox e no f:selectItems

EDIT:me enganei,n vi q era um manylistbox.Coloca o código que monta listaStatusBean


Cara, eu acho que você está certo viu. Não tem que apontar para outro cara não?
Se a outra lista for de Objetos e não Strings, aí sim terá que ter um converter.

Pois é,confesso que to em duvida,nunca usei lista de seleção multipla no JSF.

Mas pelo erro eu diria que está sendo montado um List<String> em vez de List<StatusBean >

Hebert_Coelho

Então creio que aí está seu problema viu.

Se fosse de String para string iria na moral.

diogoprosoft

Montagem

listaStatusBean = statusDAO.selectStatusListAll();

e esse statusDAO.selectStatusListAll(); retorna um List

Mais a visão de vcs está legal, agora falta achar onde que está dando esse problema.

R

jakefrog:
Então creio que aí está seu problema viu.

Se fosse de String para string iria na moral.

Assim tbm n iria,pq a classe String não tem um atributo chamado ‘codStatus’ :smiley:

Hebert_Coelho

Vc pode tentar alterar colocando o converter e editando o código itemValue="#{s.codStatus}" para itemValue="#{s}"

R

Acho que matei o que é.

Muda a visibilidade da variável codStatus de private pra public.

Hebert_Coelho

raf4ever:
jakefrog:
Então creio que aí está seu problema viu.

Se fosse de String para string iria na moral.

Assim tbm n iria,pq a classe String não tem um atributo chamado ‘codStatus’ :smiley:


Com certeza.

Eu tinha cogitado de ser String/String mas aí ja passaria o valor final ou coisa do genero.

Hebert_Coelho

raf4ever:
Acho que matei o que é.

Muda a visibilidade da variável codStatus de private pra public.

Mano, atributo não deve ser public. Mas sim get/set.

Se atributo for public teu OO vai pro brejo.

R

jakefrog:
raf4ever:
Acho que matei o que é.

Muda a visibilidade da variável codStatus de private pra public.

Mano, atributo não deve ser public. Mas sim get/set.

Se atributo for public teu OO vai pro brejo.

Pois n é que eu falei besteira de novo? hehehe

Diogo,posta essa tua classe controller inteira,e a classe que busca a lista do banco tbm.

drsmachado

raf4ever:
jakefrog:
raf4ever:
Tem uma coisa errada nesse código:

&lt;h:selectManyListbox id="codStatus" value="#{listarChamadosController.listaStatusBean}" styleClass="ui-inputfield ui-widget ui-state-default ui-corner-all" size="10" style="width:250px;" &gt;                                        
        &lt;f:selectItem itemLabel="" itemValue="" /&gt;  
        &lt;f:selectItems value="#{listarChamadosController.listaStatusBean}" var="s"  
                         itemLabel="#{s.dscStatus}" itemValue="#{s.codStatus}" /&gt;  
    &lt;/h:selectManyListbox&gt;

Vc tá usando “listarChamadosController.listaStatusBean” duas vezes,no h:selectManyListBox e no f:selectItems

EDIT:me enganei,n vi q era um manylistbox.Coloca o código que monta listaStatusBean


Cara, eu acho que você está certo viu. Não tem que apontar para outro cara não?
Se a outra lista for de Objetos e não Strings, aí sim terá que ter um converter.

Pois é,confesso que to em duvida,nunca usei lista de seleção multipla no JSF.

Mas pelo erro eu diria que está sendo montado um List<String> em vez de List<StatusBean >

Eu concordo com o raf4.

Tem como postar o managedBean?

diogoprosoft

Tá ai galera, ainda sem solução

Controller

@Controller
@Scope("view")
public class ListarChamadosController implements Serializable{

	private static final long serialVersionUID = 1L;

	@Autowired
	private StatusDAO statusDAO;
	
	@Autowired
	private ClasseDAO classeDAO;
	
	@Autowired
	private EquipeDAO equipeDAO;
	
	@Autowired
	private UsuarioDAO usuarioDAO; 
	
	@Autowired
	private ProjetoDAO projetoDAO;
	
	@Autowired ChamadoDAO chamadoDAO;
	
	private List<ChamadoBean> listarChamadosBean;
	private List<StatusBean> listaStatusBean;
	private List<ClasseBean> listarClasseBean;
	private List<EquipeBean> listarEquipeBean;
	private List<UsuarioBean> listarUsuarioBean;
	private List<UsuarioBean> listarTecnicosBean;
	private List<ProjetoBean> listarProjetoBean;
	private ClasseBean classeBean;
	private EquipeBean equipeBean;	
	private UsuarioBean usuarioBean;
	private ProjetoBean projetoBean;
	private ChamadoBean chamadoBean;
	private StatusBean statusBean;
	
	private String dtAberturaInicio;
	private String dtAberturaFim;
	private Integer idChamado;
	private String nmCliente;
	private String descricao;
	
	@PostConstruct
	public void init(){
		classeBean = new ClasseBean();
		equipeBean = new EquipeBean();
		usuarioBean = new UsuarioBean();
		projetoBean = new ProjetoBean();
		chamadoBean = new ChamadoBean();
		statusBean = new StatusBean();
		
		listarChamadosBean = null;
	}
	
	@PreDestroy
	public void destroy(){
		classeBean = new ClasseBean();
		equipeBean = new EquipeBean();
		usuarioBean = new UsuarioBean();
		projetoBean = new ProjetoBean();
		chamadoBean = new ChamadoBean();
		statusBean = new StatusBean();

		listaStatusBean = null;
		listarClasseBean = null;
		listarEquipeBean = null;
		listarUsuarioBean = null;
		listarTecnicosBean = null;
		listarProjetoBean = null;
		listarChamadosBean = null;
	}

	public void carregaLista(){
		try{
			listaStatusBean = statusDAO.selectStatusListAll();
			listarClasseBean = classeDAO.selectClasseListAll();
			listarEquipeBean = equipeDAO.selectEquipeListAll();
			listarUsuarioBean = usuarioDAO.selectUsuariosGenerico();
			listarTecnicosBean = usuarioDAO.selectTecnicoAll();
			listarProjetoBean = projetoDAO.selectProjetoListAll();
		}catch (Exception e) {
			FacesContext messages = FacesContext.getCurrentInstance();
			messages.addMessage(null, new FacesMessage("Atenção", e.getMessage()));

			e.printStackTrace();
		}	
	}
	
	public void populaTabelaChamados(){

		try{
			chamadoBean.setDtAbertura(dtAberturaInicio);
			chamadoBean.setDtFechamento(dtAberturaFim);
			chamadoBean.setCdChamado(idChamado);
			if(equipeBean.getCodEquipe() == 0){
				chamadoBean.setCdEquipe("");
			}else{
				chamadoBean.setCdEquipe(String.valueOf(equipeBean.getCodEquipe()));
			}
			if(classeBean.getCdClasse() == 0){
				chamadoBean.setCdClasse("");
			}else{
				chamadoBean.setCdClasse(String.valueOf(classeBean.getCdClasse()));
			}
			chamadoBean.setCdUsuario(usuarioBean.getCdUsuario());
			chamadoBean.setNmCliente(nmCliente);
			chamadoBean.setDscDescricao(descricao);
			if(usuarioBean.getCdUsuario() == 0){
				chamadoBean.setCdTecnico("");
			}else{
				chamadoBean.setCdTecnico(String.valueOf(usuarioBean.getCdUsuario()));
			}
			chamadoBean.setCdProjeto(projetoBean.getCodProjeto());
			
			if(!listaStatusBean.isEmpty()){
				String tSelect = "";
				for(int i =0; i < listaStatusBean.size(); i++){
					if (tSelect == "") {
	                    tSelect = String.valueOf(listaStatusBean.get(i));
	                } else {
						tSelect = tSelect + "," + listaStatusBean.get(i);
	                }
				}
				chamadoBean.setCodStatus(tSelect);
			}
			listarChamadosBean = chamadoDAO.selectChamadosAll(chamadoBean);
		}catch (Exception e) {
			FacesContext messages = FacesContext.getCurrentInstance();
			messages.addMessage(null, new FacesMessage("Atenção", e.getMessage()));

			e.printStackTrace();
		}
		
	}

gets e sets

Bean

public class StatusBean implements Serializable{

	private static final long serialVersionUID = 1L;
	
	private String codStatus;
	private Integer codStatusSaida;
	private String dscStatusSaida;
	private String dscStatus;
	private String dscObservacao;
	private Image figura;
	private String figuraPath;
	private boolean flEnviarEmail;
	private String flDefault;
	private Integer pRetCodigo;
	private String pRetMensagem;
	private String parametro;
	private String filtro;
 gets e sets

xhtml

<h:selectManyListbox id="codStatus" value="#{listarChamadosController.listaStatusBean}"
	styleClass="ui-inputfield ui-widget ui-state-default ui-corner-all" size="10" style="width:250px;" >			 							
<f:selectItem itemLabel="" itemValue="" />
<f:selectItems value="#{listarChamadosController.listaStatusBean}" var="s"	 itemLabel="#{s.dscStatus}" itemValue="#{s.codStatus}" />
</h:selectManyListbox>

Ta na mão galera

diogoprosoft

Resolvido, era como vcs falaram mesmo no meu h:selectManyListbox eu tinha os dois values iguais assim ele dava erro, agora criei uma lista para levar os valores, ficou ótimo

<h:selectManyListbox id="codStatus" value="#{listarChamadosController.codStatusList}"
			 							styleClass="ui-inputfield ui-widget ui-state-default ui-corner-all" size="10" 
			 							style="width:250px;">
			 				<f:selectItem itemLabel="" itemValue="" />
				  			<f:selectItems value="#{listarChamadosController.listaStatusBean}" var="s"
				  					 itemLabel="#{s.dscStatus}" itemValue="#{s.codStatus}" />
				  	</h:selectManyListbox>

Obrigado a todos

Criado 21 de dezembro de 2011
Ultima resposta 22 de dez. de 2011
Respostas 25
Participantes 4