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

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?

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é…

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;
		
	}*/
	
}	

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?

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á.

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é…

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

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

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

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)

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;