[RESOLVIDO] "Alimentar" diversos <select> na pagina VRaptor+Hibernate

Boa noite a todos, novamente estou aqui, rsr, agora minha duvida está bem “cabulosa”(para mim claro), eu estou montando um formulario que nele possui muitos para serem selecionados puxando os dados do banco, mas como eu posso fazer para trazer os metodos listaTudo(); das outras classes? fiquei perdido, procurei no forum mas não achei, bem que não sabia muito oque procurar, eu li uma vez que teria que utilizar um result.include mas não sei se isso é o certo e muito menos como implementa-la

como eles estão no formulario e meu metodo está vazio, como eu procederia?

public void formulario() { }

colocaria no formulario mesmo? para ser carregado qndo chamar a pagina?

e quando chamar o edita? como saberei qual está selecionado no banco?

se poderem me informar ao menos onde encontrar jah ajuda muito, obrigado. :oops: [list]]

Olá, você está seguindo alguma apostila? Se não recomendo a FJ21 e FJ28(no teu caso mais a 28) da Caelum…

Lá você encontrará muitas coisas interessantes e a solução para tua duvida. Caso ainda esteja com duvida volte a postar.

boa sorte :smiley:

Olá amigo, obrigado, estou seguindo as aulas de vRaptor na faculdade, o professor está passando o conteudo para nós baseado na apostila fj28, por curiosidade estou estudando as duas fj21 e fj28, mas como estou no principio de tudo está complicado de achar “termos técnicos” para determinados assuntos, dai veio essa duvida, mas se tem na apostila vou dar uma analizada…

obrigado, já posto se encontrei ou não rs

Lembrando que já sei como fazer para escrever o resultado da lista, o meu problema eh utilizar diversas listas de outras classes, por exemplo

na tabela acervo possuo o atributo Editora editora, que possui relacionamento no hibernate
todas as minhas classes possuem em suas respectivas daos um método listaTudo()

então no meu formulario possuo o editora que terá as listadas através de um c:ForEach, mas como todos sabem eu necessito de uma collection para o forEach fazer o loop por isso preciso utilizar os métodos listaTudo de todas as classes que possuem relacionamento na classe acervo.

[]'s

Coloca essa carga dos Selects dentro do controller principal do seu formulario, ex: em um form. de pedidos vc vai ter listbox com tipo da venda, cond. pagamento, tipo cliente, etc. Apesar de vc ter um controlador para manter cada classe é no controlador de Pedido que vc deve chamar o DAO de cada classe acessoria e popular as listas para ficar disponivel para o formulario do pedido.

ola amigo, tdo bom? então, poderia me explicar como proceder com isso? obrigado desde já.

o jeito usual é colocar no seu método formulario mesmo:

public void formulario() {
    result.include("lista1", dao1.listaTudo());
    result.include("lista2", dao2.listaTudo());
    ...
}

obrigado a vcs, então no meu forEach eu vou referenciar pelo nome que eu colocar entre aspas

[quote]public void formulario() { result.include("lista1", dao1.listaTudo()); result.include("lista2", dao2.listaTudo()); ... } [/quote]

Ola, lucas, eu fiz o include mas mesmo assim não trás, eu não consigo pegar o retorno da lista

public void formulario() { EditoraDao editoradao = new EditoraDao(); result.include("lista", (editoradao.listaTudo())); }

[b]

E na .jsp

<dd> <select name="acervo.editora" id="acervo.editora" /> <c:forEach items="${listaList}" var="editora"> <option value="${editora.id}">"${editora.nomeEditora}"</option> </c:forEach> </select> </dd>

O que estou fazendo de errado?? Obrigado

[]`s

Já consegui, eu imaginei que tinha que trazer o retorno com o tipo mais colocando somente lista já funcionou…

[]`s

Ola novamente, eu consegui fazer funcionar para listar no formulario, mas e quando eu editar como fazer para o select já vir selecionado, eu sei que eu teria que atribuir a propriedade selected ao mas como fazer isso? vou ter q fazer um for? eu fiz uma taglib para o select então preciso que ele tbm venha selecionado qndo possuir valor

[code]<%@attribute name=“id” required=“true”%>
<%@attribute name=“name” required=“true”%>
<%@attribute name=“valor” required=“false”%>
<%@attribute name=“lista” required=“true”%>
<%@attribute name=“classe” required=“true”%>
<%@attribute name=“campoValue” required=“true”%>
<%@attribute name=“campoDesc” required=“true”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

${classe}.${campoDesc} [/code]

[]`s

então, suponha que vc tenha o valor que vc quer deixar selecionado em ${valor}
vc vai fazer algo do tipo:

<select name="classe.nomeDaPropriedade">
<c:forEach var="algo" items="listaDeAlgo">
    <option value="${algo.nomeDaPropriedade}"
            <c:if test="${algo.nomeDaPropriedade eq valor}">
                   selected="selected"
            </c:if>
    >${algo.descricao}</option>
</c:forEach>
</select>

o name do select tem que ser o caminho da propriedade que vc quer setar… o value de cada option deve ser o valor dessa propriedade que vc quer setar (e não o caminho)

hmmm vlw lucas vou testar vlw

Estranho lucas, o meu select não grava nada no banco

<select name="acervo.editora" id="acervo.editora" /> <c:forEach items="${listaEditora}" var="editora"> <option value="${editora.id}">${editora.nomeEditora}</option> </c:forEach> </select>

qndo vai para o banco o editora.id vai null,

meu formulario está assim

[code] public void formulario() {
EditoraDao editoradao = new EditoraDao();
result.include(“listaEditora”, (editoradao.listaTudo()));

	AutorDao autordao = new AutorDao();
	result.include("listaAutor", (autordao.listaTudo()));
	
	ClassificacaoLiterariaDao classificacaodao = new ClassificacaoLiterariaDao();
	result.include("listaClassificacao", (classificacaodao.listaTudo()));  
	
	GeneroDao generodao = new GeneroDao();
	result.include("listaGenero", (generodao.listaTudo()));
	
	IdiomasDao idiomadao = new IdiomasDao();
	result.include("listaIdiomas", (idiomadao.listaTudo()));
	 
}[/code]

ele está gerando o meu html certinho através do forEach

[code]

		<option value="1">editora</option>
	
		<option value="2">teste</option>
	
		<option value="3">asdjasjkdj</option>
	
   </select>[/code]

estranho pois o nome do meu atributo é editora mesmo, e os outros campos funcionam então não imagino q seja problema no controller.

@ManyToOne private Editora editora;

eestou testando e vi q nenhum grava no banco
:S

se vc quer setar o id da editora, o name do select tem que ser acervo.editora.id

mesma coisa pros outros selects

po vlw lucas, num sabia disso não, foi de grande ajuda isso, vlw, desculpa mas não havia visto em nenhuma parte do vraptor isso, tem mais alguma especificaçào nos forms em geral q o vraptor necessita para adqrir os valores? e pq tem q ser .id?
obrigado

tem no guia de 10 minutos, na parte que explica os resources e na apostila…
http://vraptor.caelum.com.br/documentacao/vraptor3-o-guia-inicial-de-10-minutos/
http://vraptor.caelum.com.br/documentacao/resources-rest/

ele popula as propriedades navegando nos getters e setters, então se vc quer setar o id do acervo, vc usa acervo.id, se vc quer setar o nome do dono do acervo vai ser acervo.dono.nome, e assim por diante…

hmmmm eu li a documentação mas passei despercebido nessa parte, imagino q este topico será muito util para outras pessoas tbm, já que a pratica de relacionamento de tabelas é primordial para qualquer sistema, eu utilizo uma grid dinamica ao invez de mas como esse projeto tem q ser entregue daki 7 dias não vai dar tempo de ser implementado, rs, abraço e obrigado novamente.