[RESOLVIDO] Problema com view - JSF

5 respostas
Joao_Alonso

Boa tarde pessoal,

Estou estudando o JSF e estou com um problema de iniciante acredito eu. Eu tenho uma managedBean que tem possui uma lista de objetos, porém não consigo visualizar na página xhmtl. seguem os códigos.

package model;

public class Personagem {
	private String name;
	private int lvl;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getLvl() {
		return lvl;
	}
	public void setLvl(int lvl) {
		this.lvl = lvl;
	}
}

@ManagedBean
@ViewScoped
public class PersonagemBean {
	
	private List<Personagem> chars = new ArrayList<Personagem>();
	private Personagem  personagem = new Personagem();
	
	public PersonagemBean(){
		Personagem p = new Personagem();
		p.setName("Oberyn");
		p.setLvl(1);
		this.chars.add(p);
		p = new Personagem();
		p.setName("Sansa");
		p.setLvl(1);
		this.chars.add(p);
	}

	public List<Personagem> getChars() {
		return chars;
	}
	public void setChars(List<Personagem> chars) {
		this.chars = chars;
	}
       	public Personagem getPersonagem() {
		return personagem;
	}

	public void setPersonagem(Personagem personagem) {
		this.personagem = personagem;
	}


form.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html 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">

<h:body>
	<h:form>
		<h:panelGrid columns="2">
			<h:outputLabel value="Nome:" for="campo-name"/>
			<h:inputText value="#{personagemBean.personagem.name}" 
			id="campo-name" />	
			<h:outputLabel value="Lvl" for="campo-lvl"/>
			<h:inputText value="#{personagemBean.personagem.lvl}" 
			id="campo-lvl" />
			<h:commandButton value="Adicionar" 
			action="#{personagemBean.adicionaPersonsagem}"/>		
		</h:panelGrid>
	</h:form>
	
	<h:panelGroup >
		<h1>Lista de Personagens</h1>
		<ul>
			<ui:repeat var="#{personagemBean.chars}" value="personagem">
				<li><h:outputText 
				value="#{personagem.name} #{personagem.lvl}"/> </li>	
			</ui:repeat>
		</ul>
	</h:panelGroup>
</h:body>
</html>

Quem puder me auxiliar, agradeço desde já.

5 Respostas

Hebert_Coelho

Aparece alguma mensagem de erro?

Leonardo_Gaona
<h:panelGroup >  
    <h1>Lista de Personagens</h1>  
        <ul>  
            <ui:repeat var="char" value="#{personagemBean.chars}">  
                <li><h:outputText value="#{char.name} #{char.lvl}"/></li>
            </ui:repeat>  
        </ul>  
</h:panelGroup>

O atributo value deve receber o bind da collection na qual será feita a iteração. O atributo var serve para se acessar o item atual da iteração, como em um for:

for(Personagem (var)character : (value)PersonagemBean.getChars() { character.getName(); character.getLvl(); }

Espero ter ajudado :wink:

Joao_Alonso

Não, inclusive se eu mandar dar um sysout sai no console a lista com o novo personagem que eu adicionei.

Leonardo Gaona:

Mas teoricamente meu panelGroup já não está fazendo isso ?

Hebert_Coelho

Tente adicionar <h:head></h:head> antes do body.

Joao_Alonso

Leonardo Gaona só agora entendi o que você queria mostrar, eu tinha trocado os valores, estava colocando a lista no lugar da var, agora funcionou.
Muito obrigado a ambos.

Criado 13 de novembro de 2012
Ultima resposta 13 de nov. de 2012
Respostas 5
Participantes 3