Socorro... Help.... Ajuda... Duvica de como criar o selectOneListbox

5 respostas
G

Olá. Estou querendo implementar numa pagina jsf (de cadastro) o componente selectOneMenu mas estou apanhando feio já tem 2 dias. O que tenho é uma classa AlunoManager que contem um objeto curso. É justamante esse curso que eu quere pegar as informação que estão no banco de dados e colocar no SelecteOneMenu. Alguem poderia mim ajudar a construir esse metodo, ou mostra um exemplo.

Obs: Já implementei o exemplo q o thiagocg mostrou, mas esta dando um erro cur.todosCurso is not defined.

Classes
public class Aluno implements Serializable{
	
	private Integer id;
	private String nome;
	private Integer matricula;
	private Integer cpf;
	private Curso curso;
...
public class Curso implements Serializable{
	
	private Integer id;
	private String nome;
	private String sigla;
...
public class AlunoManager {
	
	private Aluno aluno = new Aluno();
	private AlunoDao alunoDao = DaoFactory.getAlunoDao();
	
	private Integer id;
	private String nome;
	private Integer matricula;
	private Integer cpf;
	private Curso curso;
	
	public String novo(){
		
		try{
			aluno = new Aluno();
			aluno.setCpf(cpf);
			aluno.setCurso(curso);
			aluno.setId(id);
			aluno.setMatricula(matricula);
			aluno.setNome(nome);
			
			alunoDao.salvar(aluno);
			
		}catch (Exception e) {
			e.printStackTrace();
		}
		return "continue";
	}
public class CursoManager {
	private Curso curso = new Curso();
	private CursoDao cursoDao = DaoFactory.getCursoDao();
	
	
	private Integer id;
	private Integer codigo;
	private String nome;
	private String sigla;
	
	public List<SelectItem>  todosCurso() throws Exception{
		List<SelectItem> list = new ArrayList<SelectItem>();
		List<Curso> cursos = cursoDao.listarTodos();
		for(Curso c: cursos){
			list.add(new SelectItem(c.getId().toString(),c.getNome()));
		}
		return list;
	}
	...

tenho tambem uma classe:

public abstract class AbstractDao<Tipo, TipoID extends Serializable> implements InterfaceDao<Tipo, TipoID>
        public void salvar(Tipo obj)throws Exception;
        ...
	public Tipo recuperar(TipoID id)throws Exception;
        ...
	public void atualizar(Tipo obj)throws Exception;
        ...
	public void excluir(Tipo obj)throws Exception;
        ...
	public List<Tipo> listarTodos()throws Exception;
        ...
}

pagina criarAluno.jsp

...
	<h:form>

		<h:outputText value="Preenchar os Dados:"></h:outputText>
		<br />
		<table>
			<tr>
				<td>MATRICULA:</td>
				<td><h:inputText id="matricula" value="#{al.matricula}"
					required="true" /></td>
			</tr>
			<tr>
				<td>NOME:</td>
				<td><h:inputText id="nome" value="#{al.nome}" required="true" /><br />
				</td>
			</tr>
			<tr>
				<td>CPF:</td>
				<td><h:inputText id="cpf" value="#{al.cpf}" required="true" /><br />
				</td>
			</tr>
			<tr>
			  <h:panelGrid columns="2">  
                  <h:outputText value="Curso" />  
                  <h:selectOneMenu>   
                     <f:selectItems value="#{cur.todosCurso}"/>  
                  </h:selectOneMenu>  
              </h:panelGrid>  
			</tr>
			<tr>
				<td></td>
				<td><h:commandButton action="#{al.novo}" value="salvar" /></td>
			</tr>
		</table>
	</h:form>
...

faces-config.xml

...
	<managed-bean>
		<managed-bean-name>al</managed-bean-name>
		<managed-bean-class>managers.AlunoManager</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>	
        <managed-bean>
		<managed-bean-name>cur</managed-bean-name>
		<managed-bean-class>managers.CursoManager</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
...

5 Respostas

thiagocg

Para criar o selectOneMenu em sua pag. jsf vc deve:

1º. Pegar a coleção de cursos q deseja q seja inseridos no selectOneMenu
2º Percorrer essa coleção criando um array com objetos do tipo ItemSelect passando em seu construtor duas Strings, primeiro a String que seria o id de sua classe e a outra String seria o valor q será exibido no selectOneMenu.
3º passar esse array para o seu selectOneMenu

Exemplo no managedBean:

public List<SelectItem> getListaCurso(){
	List<SelectItem> list = new ArrayList<SelectItem>();
	List<Curso> cursos = new CursoDAO().listarCursos();
	for (Curso curso : cursos) {
		list.add(new SelectItem(curso.getIdCurso().toString(), curso.getNomeCurso()));
	}
	return list;s
}

Exemplo no jsp:

<h:panelGrid columns="2">
	<h:outputText value="Curso" />
	<h:selectOneMenu> 
	 	<f:selectItems value="#{meuManagedBean.minhaColecaoDeSelectItem}"/>
	</h:selectOneMenu>
</h:panelGrid>
G

thiagocg:
Para criar o selectOneMenu em sua pag. jsf vc deve:

1º. Pegar a coleção de cursos q deseja q seja inseridos no selectOneMenu
2º Percorrer essa coleção criando um array com objetos do tipo ItemSelect passando em seu construtor duas Strings, primeiro a String que seria o id de sua classe e a outra String seria o valor q será exibido no selectOneMenu.
3º passar esse array para o seu selectOneMenu

Exemplo no managedBean:

public List<SelectItem> getListaCurso(){
	List<SelectItem> list = new ArrayList<SelectItem>();
	List<Curso> cursos = new CursoDAO().listarCursos();
	for (Curso curso : cursos) {
		list.add(new SelectItem(curso.getIdCurso().toString(), curso.getNomeCurso()));
	}
	return list;s
}

Exemplo no jsp:

<h:panelGrid columns="2"> <h:outputText value="Curso" /> <h:selectOneMenu> <f:selectItems value="#{meuManagedBean.minhaColecaoDeSelectItem}"/> </h:selectOneMenu> </h:panelGrid>

Cara eu fiz esse exemplo q vc demonstrou mas deu um error na pagina: cur.todosCurso is not defined.

thiagocg

posta sua pag. e seu metodo do managedBean, senão não tem jeito de saber o q pode ta acontecendo

G

Cara já coloquei no inicio com as modificações q eu fiz. CursoManager, AlunoManager e a pagina q é criarAluno(erro na linha 26).

thiagocg

vc ja debugou essa sua função?
ta retornando o valor esperado?
A unica coisa q tem de diferente dos q eu faço aqui é q eu sempre dou um binding no selectOneMenu que declarei no meu managedBean.
Mas pelo seu erro parece q ele não ta achando o método!

Criado 6 de outubro de 2008
Ultima resposta 7 de out. de 2008
Respostas 5
Participantes 2