Onde está o erro?

4 respostas
schistossoma

Olá! Estou usando o VRaptor + Hibernate em uns testes e aconteceu um erro que não consigo identificar o porquê dele aparecer. Tenho uma jsp inicio.ok.jsp que carrega informações de cds e músicas. Ela deve mostrar os cds separados na tela, cada um com suas respectivas músicas. Mas acontece o seguinte erro:

javax.el.PropertyNotFoundException: Property 'id' not found on type java.lang.String

Não entendi o porquê de um erro em um tipo que não estou usando explicitamente na jsp. Se alguem puder ajudar, agradeço. Abaixo o código da jsp (só a parte importante, para não ficar muito grande).

<div id="cds">
	<c:forEach var="cd" items="{cds}">
		
		<div id="cd-${cd.id}" class="cd">
			<span class="titulo">${cd.titulo}</span>
			<span class="artista">${cd.artista}</span>
			<hr/>
			<ol>
				<c:forEach var="musica" items="${cd.musicas}">
					<li class="musica" id="musica-${musica.id}">
						${musica.titulo} - ${musica.preco}
					</li>
				</c:forEach>
			</ol>
		</div>
	</c:forEach>
	</div>

P.S.: suponho que o erro esteja na jsp, porque a exception gerada está relacionada com EL.

4 Respostas

A

schistossoma,

posso estar enganado, mas o id deve estar no seu bean. Se o cd é o seu ArrayList e cds foi passado pelo atributo. Veja direito e depois post se deu certo

Falo
Abs

schistossoma

marsola2k, acho que está tudo certo aqui. Mas como to começando com web, pode estar faltando alguma coisa. Vou colocar aqui o código da classe que manipula esses dados.

public class CdLogic {
	
	private final DaoFactory daoFactory;
	
	private Cd cd;
	private List<Cd> cds;
	
	public CdLogic (DaoFactory daoFactory) {
		this.daoFactory = daoFactory;
	}
	
	public void formulario() {
		
	}
	
	public void editar (Cd cd) {
		this.cd = this.daoFactory.getCdDao().procura(cd.getId());
	}
	
	@Validate(params={"cd"})
	public void armazena (Cd cd) {
		this.daoFactory.beginTransaction();
		this.daoFactory.getCdDao().atualiza(cd);
		this.daoFactory.commit();
	}
	
	public void remove (Cd cd) {
		this.daoFactory.beginTransaction();
		this.daoFactory.getCdDao().remove(cd);
		this.daoFactory.commit();
	}
	
	public void lista() {
		this.cds = this.daoFactory.getCdDao().listaTudo();
	}
	
	public Cd getCd() {
		return cd;
	}
	
	public List<Cd> getCds() {
		return cds;
	}
}

Estou seguindo a apostila FJ-28 da Caelum, os códigos estão do mesmo jeito que lá. :slight_smile:

P

Parece que a sua Classe de CD ou Música estão com alguma incompatibilidade. pois o erro é como se esperasse uma id String, mas creio que essa id deva ser int ou long.

o código das classes talvez ajudasse…

vlw!

schistossoma

Falha nossa :lol: Aí vai as classes Cd e Musica.

public class Cd {
	
	@Id
	@GeneratedValue
	private Long id;
	
	@NotEmpty(message="O título não pode estar vazio!")
	private String titulo;
	private String artista;
	private String genero;
	
	@OneToMany(mappedBy="cd")
	private List<Musica> musicas;
	
	public List<Musica> getMusicas() {
		return musicas;
	}
	public void setMusicas(List<Musica> musicas) {
		this.musicas = musicas;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public String getArtista() {
		return artista;
	}
	public void setArtista(String artista) {
		this.artista = artista;
	}
	public String getGenero() {
		return genero;
	}
	public void setGenero(String genero) {
		this.genero = genero;
	}
}
public class Musica {
	
	@Id
	@GeneratedValue
	private Long id;
	
	@NotEmpty(message="O título não pode estar vazio!")
	private String titulo;
	private Double preco;
	
	@ManyToOne
	private Cd cd;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public Double getPreco() {
		return preco;
	}

	public void setPreco(Double preco) {
		this.preco = preco;
	}

	public Cd getCd() {
		return cd;
	}

	public void setCd(Cd cd) {
		this.cd = cd;
	}
}
Criado 31 de agosto de 2007
Ultima resposta 31 de ago. de 2007
Respostas 4
Participantes 3