[Resolvido] Property not found on type java.lang.String

10 respostas
M

Boa noite, GUJ! Graças a ajuda de vocês estou finalizando meu trabalho. Estou exibindo as mensagens salvas no BD através de um <h:datatable> porém o formato deles não está conforme o desejado. Veja:

[[2012-11-21 23:13:22.0] Marcelo para Marcelo : a, [2012-11-21 23:35:00.0] opera para Chrome : a, [2012-11-21 23:41:18.0] Opera para Chrome : hdsauhsdausadhsd, [2012-11-22 21:45:56.0] Chrome para Chrome : a, [2012-11-24 20:52:59.0] Opera para Opera : dasasdasd, [2012-11-24 20:53:02.0] Opera para Chrome : Opera para Opera : dasasdasddaasdasdas, [2012-11-24 20:53:05.0] Opera para Opera : adsadssadsadsa, [2012-11-24 20:53:08.0] Opera para Chrome : asdsadasdsadsadsad, [2012-11-24 21:31:56.0] Chrome para Chrome : l, [2012-11-24 21:42:04.0] Chrome para Chrome : kkkkkkkk ]

Deveria sair:

[2012-11-21 23:13:22.0] Marcelo para Marcelo : a
[2012-11-21 23:35:00.0] opera para Chrome : a
[2012-11-21 23:41:18.0] Opera para Chrome : hdsauhsdausadhsd
[2012-11-22 21:45:56.0] Chrome para Chrome : a
[2012-11-24 20:52:59.0] Opera para Opera : dasasdasd
[2012-11-24 20:53:02.0] Opera para Chrome : Opera para Opera : dasasdasddaasdasdas
[2012-11-24 20:53:05.0] Opera para Opera : adsadssadsadsa
[2012-11-24 20:53:08.0] Opera para Chrome : asdsadasdsadsadsad
[2012-11-24 21:31:56.0] Chrome para Chrome : l
[2012-11-24 21:42:04.0] Chrome para Chrome : kkkkkkkk

chat.xhtml

&lt;h:form id="form1"&gt;
				&lt;h:panelGroup id="painelChatMensagens"&gt;
                    
                    &lt;h:dataTable value=" #{principal.chat.mensagemPrivadaBD }" var="outMensagemPrivada"&gt;
                        &lt;h:outputText&gt;#{outMensagemPrivada}&lt;/h:outputText&gt;
                    &lt;/h:dataTable&gt;

				&lt;/h:panelGroup&gt;
public ArrayList&lt;ChatTable&gt; getMensagensPrivadasBD(){

		sessao.beginTransaction();		
		ArrayList&lt;ChatTable&gt; listaMensagensPrivadasBD = (ArrayList&lt;ChatTable&gt;) sessao.createQuery("FROM ChatTable").list();
        return listaMensagensPrivadasBD; 	        
		
	}
@Override
	public String toString(){
		
		return "[" + dataHoraMensagem + "]  " + usuarioOrigem + " para " + usuarioDestino + " : " + mensagemPrivada;
		
	}

O que estou fazendo de errado ou não estou fazendo?

10 Respostas

J

Blz parceiro,

Não entendo muito de web e espero realmente poder ajudar. O que você tá apresentando como saída é o toString de um array, e não o toString de cada elemento do array. Eu acredito nisto porque a sua saída é cercade colchetes ([]), típica de um array. Veja este código:

public static void main(String[] args) {
		List<Integer> a = new ArrayList<Integer>();
		a.add(1);
		a.add(2);
		a.add(3);
		a.add(4);
		a.add(5);
		System.out.println(a);
	}

a saída dele será

[1, 2, 3, 4, 5]

Inté…

M

Obrigado, Jubarius. Já tentei de outras formas também não obtive sucesso, estou tentando assim agora:

ChatDao:

public List&lt;ChatTable&gt; getMensagensPrivadasBD(){
		
		Criteria select = sessao.createCriteria(ChatTable.class);
		List objetos = select.list();
		return objetos;
		
	}

Chat:

public ArrayList&lt;ChatTable&gt; getMensagemPrivadaBD() {
		
		ChatDao cdao = new ChatDao();
		return (ArrayList&lt;ChatTable&gt;) cdao.getMensagensPrivadasBD();

	}

chat.xhtml:

&lt;h:dataTable value=" #{chat.mensagemPrivadaBD }" var="outMensagemPrivada"&gt;

                        &lt;h:column &gt;
                           &lt;h:outputText value="#{outMensagemPrivada.mensagemPrivada}"&gt;&lt;/h:outputText&gt;
                        &lt;/h:column&gt;
                    &lt;/h:dataTable&gt;

E me retorna o erro:

javax.servlet.ServletException: /chat.xhtml @70,86 value="#{outMensagemPrivada.mensagemPrivada}": Property 'usuarioOrigem' not found on type java.lang.String

O chatTable.java:

package model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import controller.UsuarioBean;

@Entity
@Table(name = "chat")
public class ChatTable {
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column
	private int id;

	@Column(name = "usuario_destino")
	private String usuarioDestino;
	
	@Column(name = "usuario_origem")
	private String usuarioOrigem;
	
	@Column(name = "data_mensagem")
	private Date dataHoraMensagem;
	
	@Column(name = "mensagem")
	private String mensagemPublica;
	
	@Column(name = "mensagem_privada")
	private String mensagemPrivada;

	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsuarioOrigem() {
		return usuarioOrigem;
	}
	public void setUsuarioOrigem(String usuarioOrigem) {
		this.usuarioOrigem = usuarioOrigem;
	}
	public String getUsuarioDestino() {
		return usuarioDestino;
	}
	public void setUsuarioDestino(String usuarioDestino) {
		this.usuarioDestino = usuarioDestino;
	}
	public Date getDataHoraMensagem() {
		return dataHoraMensagem;
	}
	public void setDataHoraMensagem(Date dataHoraMensagem) {
		this.dataHoraMensagem = dataHoraMensagem;
	}
	public String getMensagemPublica() {
		return mensagemPublica;
	}
	public void setMensagemPublica(String mensagemPublica) {
		this.mensagemPublica = mensagemPublica;
	}
	public String getMensagemPrivada() {
		return mensagemPrivada;
	}
	public void setMensagemPrivada(String mensagemPrivada) {
		this.mensagemPrivada = mensagemPrivada;
	}
	
/*	@Override
	public String toString(){
		String newLine = System.getProperty("line.separator");
		return "[" + dataHoraMensagem + "]  " + usuarioOrigem + " para " + usuarioDestino + " : " + mensagemPrivada + newLine;
		
	}*/
	
}
J

Ei você já tentou fazer a mensagem passar para um console, só para ver se o erro está dentro da página ou do trecho de código que recupera do banco as mensagens?

M

Sim, sim. Já fiz:

public static void main(String[] args) {
		
		ChatDao cdao = new ChatDao();
		
		for(ChatTable c : cdao.getMensagemPrivadaBD()){
			System.out.println(c.getMensagemPrivada());
		}
	}

Saída:

a
a
hdsauhsdausadhsd
a
dasasdasd
Opera para Opera : dasasdasddaasdasdas
adsadssadsadsa
asdsadasdsadsadsad
l
kkkkkkkk

testeeeeeeeeeeeeeeee
asadsadsad

Exatamente como deveria sair no JSF, mas não sei como deveria estar funcionando lá.

J

Boa tarde amigo,

Para ser franco, não entendo nada de JSF, o máximo que tenho é uma apostila da k19. Até dei uma olhada lá, mas o exemplo tá quase igual ao seu, a única diferença é que o conteúdo das colunas não está dentro das tags “h:outputtext”. O código que tem lá e este:

<h:dataTable value="#{cursosBean.cursos}" var="curso">
 <f:facet name="header">Lista de cursos</f:facet>
 <h:column>
 <f:facet name="header">Sigla</f:facet>
 #{curso.sigla}
 </h:column>
 <h:column>
 <f:facet name="header">Nome</f:facet>
 #{curso.nome}
 </h:column>
 <h:column>
 <f:facet name="header">Descrição</f:facet>
 #{curso.descricao}
 </h:column>
 <h:column>
 <f:facet name="header">Adicionar turma</f:facet>
 <h:commandLink
value="Adicionar turma"
action="#{cursosBean.adicionarTurma(curso)}" />
 </h:column>
</h:dataTable>

Espero que isso ajude em algo.

Boa sorte,

inté…

M

Obrigado pela tua disposição em me ajudar, Jubarius. Mas não me ajudou. Ainda estou pesquisando alguma solução, aguardarei aqui. Obrigado.

C

Guarda os dados dentro de um Array, depois vc preenche usa tabela com ela.

F

ja tentou usar a tag
entre os textos que vc quer quebrar?

como a saida e html vc precisa quebrar o texto de uma forma que o html intenda

M

Já tentei armazená-lo em um arraylist, mas é o mesmo problema. Não estou utilizando a listagem com toString(). Nesse momento o código está da seguinte forma:

xhtml

&lt;h:dataTable value=" #{principal.chat.listaMensagemPrivadaBD }" var="mp"&gt;
    &lt;h:column&gt; 
        &lt;h:outputText value="#{mp.mensagemPrivada }"&gt;&lt;/h:outputText&gt;
    &lt;/h:column&gt;
&lt;/h:dataTable&gt;

Chat

private List&lt;ChatTable&gt; mpLista;

	public List&lt;ChatTable&gt; getListaMensagemPrivadaBD() {
		
		ChatDao cdao = new ChatDao();
		mpLista = cdao.getMensagemPrivadaBD();
		return mpLista;

	}

ChatDao

public List&lt;ChatTable&gt; getMensagemPrivadaBD(){
		
		return sessao.createCriteria(ChatTable.class).list();

	}

Erro:

javax.servlet.ServletException: /chat.xhtml @68,56 value="#{mp.mensagemPrivada }": Property 'mensagemPrivada' not found on type java.lang.String
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
M

Pessoal, obrigado pela ajuda. Magicamente funcionou alterando o:

&lt;h:dataTable value=" #{principal.chat.listaMensagemPrivadaBD }" var="mp"&gt;
    &lt;h:column&gt; 
        &lt;h:outputText value="#{mp.mensagemPrivada }"&gt;&lt;/h:outputText&gt;
    &lt;/h:column&gt;
&lt;/h:dataTable&gt;

Para:

&lt;h:dataTable var="mp" value="#{principal.chat.listaMensagemPrivadaBD }"&gt;
                        &lt;h:column&gt;
                           #{mp.dataHoraMensagem }
                           #{mp.usuarioOrigem }
                        &lt;/h:column&gt;
                    &lt;/h:dataTable&gt;
Criado 24 de novembro de 2012
Ultima resposta 26 de nov. de 2012
Respostas 10
Participantes 4