Disponibilizando objetos para o View com Spring MVC [RESOLVIDO]

Olá a todos,

Bom, estou utilizando pela primeira vez o Spring MVC (antes usava o Struts) e por isso estou tendo alguma difuiculdade em alguns detalhes que diferem do Struts. Um deles é como disponibilizar o um objeto para o view (no caso uma JSP) e assim poder exibi-lo em formato de tabela ou combo box por exemplo.

na minha Action (Controller) eu tenho o método que pesquisa no banco uma lista de objetos e redireciona para uma jsp.

@RequestMapping("/cadastro")
public String telaCadastro(Model model) {		
        List<Moeda> moedas = moedaDao.buscarMoedas();				
	model.addAttribute("moedas", moedas);

	return "cadastro/pais/CadastroPais";
}

Reparem que eu já estou tentando usar o tal Model do spring mvc. que conforme alguns tutoriais que li deveria dar certo e eu conseguiria acessar a lista “moedas” na JSP através de Expression Language (no caso: ${moedas}). Só que o redirecionamento acontece normalmente, mas não consigo acessar o tal objeto. Não sei o que frazer… alguém tem alguma dica !!!

O seu moedas está vindo com valor ?
Mostra a sua tela por favor.

O spring tem um tag para criar select’s eu acho, mas dá com jstl e el também.

Sim, o moedas ta vindo preenchido certinho. só que quando chega na JSP, eu coloco com ${moedas.nome} e ao invés de exibir o nome, ele continua exibindo ${moedas.nome}… ele simplesmente não reconhece.

Segue o trecho da JSP:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  

	<label>Moeda:</label>		
			<select>
				<c:forEach items="${moedas}" var="listaMoeda">
					<option value="${listaMoeda.id}">${listaMoeda.nome}</option>
				</c:forEach>
			</select>

Estranho.
Tenta colocar para mostrar em um label só para ver se printa o nome.

não adianta, não printa o nome e somente a propria Expression Language …não sei o que fazer =/

Qual a versão do seu servlet no web.xml ?

[code]@RequestMapping("/cadastro")
public String telaCadastro(Model model, ModelMap map) {
List moedas = moedaDao.buscarMoedas();
map.addAttribute(“moedas”, moedas);

return "cadastro/pais/CadastroPais";  

}[/code] Depois você procura a diferença do Model e do ModelMap. Vê se funciona agora.

Utilize String como retorno quando precisar fazer algum redirect. Como você quer retornar uma lista de moedas, pode mandar a lista diretamente como retorno do método, sem precisar dessas complicações com ModelMap.

Leia esse post, vai te ajudar.

Mas ele quer mandar uma lista, como ele mandaria a lista por String ?

Teria que se for diferente colocar com setAttribute

Eu não tinha notado como a String usada no retorno é complicada. Se não for possível simplificar os caminhos para as jsps a ponto de não precisar passá-lo com a String, recomendo fazer uso da classe ModelAndView.

Agora que eu vi que ele não estava usado o ModelAndView.

Muda o map.addAtribute para model.addAtribute

Galera, agradeço a todos pelas dicas mas no final foi mais simples que eu pesava…
o grande problema é que o meu projeto estava ignorando toda e qualquer Expression Language.
tive que colocar no web.xml o seguinte:

<jsp-config>  
        <jsp-property-group>  
            <url-pattern>*.jsp</url-pattern>  
            <el-ignored>false</el-ignored>
        </jsp-property-group>  
    </jsp-config>

depois disso, tudo voltou a funcionar. Dei uma pesquisa pra entender o porque disso, e pelo que entendi (posso estar errado) por causa do Spring MVC, as Expression Language são ignoradas por padrão e é necessário vc ativá-las novamente. Caso que não ocorrer se vc utilizar Struts por exemplo. Enfim, problema resolvido e fica a dica caso alguém passe por isso!!!

Estranho.
Mas como funcionou então.