Don't know how to iterate over supplied "items" in <forEach>

3 respostas
Lucas_Sorrentino

Bem… boa tarde a todos… gostaria de saber se alguém pode me dar uma luz aqui… todos os meus métodos e jsps estavam funcionanod normalmente… assim que inseri as validações. começou a dar esse erro sempre que insiro dados errados, ou seja, sempre a validação entra em ação:

Don’t know how to iterate over supplied “items” in <forEach>

alguém sabe o que pode estar acontecendo? segue abaixo meu controller e meu jsp:

Controller:

@Resource
public class TemposDiariosController {

	private final TempoDiarioDAO dao;
	private final Result result;
	private final Validator validator;
	private final ColaboradorDAO colaboradorDao;
	private final UsuarioWeb usuarioWeb;
	private final ClassificacaoDiaDAO classificacaoDiaDao;
	
	
	public TemposDiariosController(TempoDiarioDAO dao, Result result, Validator validator, ColaboradorDAO colaboradorDao, UsuarioWeb usuarioWeb, ClassificacaoDiaDAO classificacaoDiaDao){
		this.dao = dao;
		this.result = result;
		this.validator = validator;
		this.colaboradorDao = colaboradorDao;
		this.usuarioWeb = usuarioWeb;
		this.classificacaoDiaDao = classificacaoDiaDao;
		
	}
	
	@Restrito
	public List<TempoDiario> lista(){
	
				
		return dao.listaTudo();
	}
	
	@Restrito
	public List<TempoDiario> listaPorColaboradorEMesEAnoAtual(Colaborador colaborador){
		
		
		Date hoje = new Date();
		
		String mes = new SimpleDateFormat("MM").format(hoje);
		String ano = new SimpleDateFormat("yyyy").format(hoje);
		
		Colaborador colaboradorTD = usuarioWeb.getLogado();
		colaboradorDao.carregaLoginESenha(colaboradorTD);
		
		
		return dao.listaPorColaborador(colaboradorTD, mes, ano);
	}
	
	//public List<TempoDiario> listaPorColaboradorEMesEAnoAtualParaAdicao(TempoDiario tempoDiario){
		
	//	String dia = tempoDiario.getDia();
	//	String mes = tempoDiario.getMes();
	//	String ano = tempoDiario.getAno();
	//	Colaborador colaboradorTD = usuarioWeb.getLogado();
	//	colaboradorDao.carregaLoginESenha(colaboradorTD);
		
	
	//	return dao.listaParaAdicao(colaboradorTD, dia, mes, ano);
	//}
	
	
	@Restrito
	@Post @Path("/temposDiarios")
	public void adiciona(final TempoDiario tempoDiario, Integer classificacaoDia){
		
		
		tempoDiario.setUltimaAtualizacao(new GregorianCalendar().getTime());
		tempoDiario.setColaborador(usuarioWeb.getLogado().getId());
		
		Colaborador colaborador = new Colaborador();
		colaborador.setId(usuarioWeb.getLogado().getId());
		tempoDiario.setCodColaborador(usuarioWeb.getLogado());
		tempoDiario.setCodDia(classificacaoDiaDao.carrega(classificacaoDia));
		tempoDiario.setDataInclusao(new GregorianCalendar().getTime());
		tempoDiario.setResponsavelInclusao(usuarioWeb.getLogado().getId());
		tempoDiario.setSaldo(tempoDiario.calcularSaldo());
		tempoDiario.setTotal(tempoDiario.getTempoTrabalhado());
		final List<TempoDiario> listaRd = dao.listaParaAdicao(colaborador, tempoDiario.getDia(), tempoDiario.getMes(), tempoDiario.getAno());
		for(int i=0; i< listaRd.size(); i++ ){
			listaRd.get(i);
			System.out.println(listaRd.size());
			System.out.println(i);
		}
		
		validator.checking(new Validations(){{
			that(tempoDiario.getEntrada1().length() == 4 || tempoDiario.getEntrada1().length() == 0,
			"Entrada 1","entrada1.obrigatorio");
			that(tempoDiario.getEntrada2().length() == 4 || tempoDiario.getEntrada2().length() == 0,
			"Entrada 2","entrada2.obrigatorio");
			that(tempoDiario.getEntrada3().length() == 4 || tempoDiario.getEntrada3().length() == 0,
			"Entrada 3","entrada3.obrigatorio");
			that(tempoDiario.getSaida1().length() == 4 || tempoDiario.getSaida1().length() == 0,
			"Saida 1","saida1.obrigatorio");
			that(tempoDiario.getSaida2().length() == 4 || tempoDiario.getSaida2().length() == 0, 
			"Saida 2","saida2.obrigatorio");
			that(tempoDiario.getSaida3().length() == 4 || tempoDiario.getSaida3().length() == 0,
			"Saida 3","saida3.obrigatorio");
			that(listaRd.size() < 1,
			"Data" , "data.obrigatorio");
				
			}});
		validator.onErrorUse(page()).of(TemposDiariosController.class).formulario(); 
				
		dao.salva(tempoDiario);
		result.redirectTo(TemposDiariosController.class).listaPorColaboradorEMesEAnoAtual(usuarioWeb.getLogado());
		}
	
	
	@Restrito
	public void adicionado(){
		
	}
	public void menu(){
		
	}
	
	@Restrito
	public void formulario(){
		
		
		result.include("classificacaoDia", classificacaoDiaDao.listaTudo());
		
		
		
		
	}

JSP:

<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<c:import url="header.jsp"/>

<body onload="document.getElementById('entrada1').focus()">

<c:forEach var="error" items="${errors}">
    ${error.category} - ${error.message}<br />
</c:forEach>

<form action="<c:url value="/temposDiarios"/>" method="POST">
<table>
	<thead>
		<tr>
			<th>Dia</th>
			<th>Mes</th>
			<th>Ano</th>
		</tr>
	</thead>
	<tbody>
	<tr>
	<jsp:useBean id="data" class="java.util.Date"/>
		<td>  
			<label for="dia"></label>
			<input id="dia" type="text" name="tempoDiario.dia" value="<fmt:formatDate pattern="dd" value="${data}"/>" style=" width : 65px;"></input>
		</td>
		<td>
			<label for="mes"></label>
			<input id="mes" type="text" name="tempoDiario.mes" value="<fmt:formatDate pattern="MM" value="${data}"/>" style=" width : 65px;"></input>
		</td>
		<td> 
		  
			<label for="ano"></label>
			<input id="ano" readonly="readonly" type="text" name="tempoDiario.ano" value="<fmt:formatDate pattern="yyyy" value="${data}"/>" style=" width : 65px;"></input>
		</td>
	</tr>
	</tbody>
</table>
<table>
	<thead>
		<tr>
			<th>Classificacao Dia</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				<fieldset>
				<select name="classificacaoDia" style=" height : 25px;">   
					<option value="">--Classificacao Dia--</option> 
  					<c:forEach var="classificacaoDia" items="${classificacaoDia}">   
   				 	<option value="${classificacaoDia.id}">${classificacaoDia.descricao}</option>   
  					</c:forEach>   
				</select>
				</fieldset>
			</td>
		</tr>
	</tbody>
</table>
<table>
	<thead>
	 <tr>
		<th>Entrada</th>
		<th>Saida</th>
		
	 </tr>
    </thead>
	<tbody>
		<tr>
			<td>
			<label for="entrada1"></label>
			<input id="entrada1" type="text" name="tempoDiario.entrada1" value="${tempoDiario.entrada1}" maxlength="4" />
			</td>
			<td>
			<label for="saida1"></label>
			<input id="saida1" type="text" name="tempoDiario.saida1" value="${tempoDiario.saida1}" maxlength="4"/>
			</td>
			</tr>
			<tr>
			<td>
			<label for="entrada2"></label>
			<input id="entrada2" type="text" name="tempoDiario.entrada2" value="${tempoDiario.entrada2}" maxlength="4"/>
			</td>
			<td>
			<label for="saida2"></label>
			<input id="saida2" type="text" name="tempoDiario.saida2" value="${tempoDiario.saida2}" maxlength="4"/>
			</td>
			</tr>
			<tr>
			<td>
			<label for="entrada3"></label>
			<input id="entrada3" type="text" name="tempoDiario.entrada3" value="${tempoDiario.entrada3}" maxlength="4"/>
			</td>
			<td>
			<label for="saida3"></label>
			<input id="saida3" type="text" name="tempoDiario.saida3" value="${tempoDiario.saida3}"maxlength="4"/>
			</td>
		</tr>
	</tbody>
		<a href="<c:url value="/temposDiarios/${tempoDiario.id}"/>">Cadastrar Atividade</a>	
		
</table>
		<table>
			<thead>
				<tr>Observações:</tr>
			</thead>
				<tbody>
					<tr>
					<td><label for="obs"></label>
					<input id="obs" type="text" name="tempoDiario.obs" value="${tempoDiario.obs}" style="width : 631px; height : 98px;"/></td>
					</tr>
				</tbody>
		</table>
		<table>
			<thead>
			<tr>
				<th>Saldo:</th>
			</tr>
			</thead>
			<tbody>
				<tr>
					<td><label for="saldo"></label>
					<input id="saldo" readonly="readonly" type="text" name="tempoDiario.saldo" value="${tempoDiario.saldo }"/>
					</td>
				</tr>
			</tbody>
			
		</table>

<button type="submit">Salvar</button>
</form>

3 Respostas

Lucas_Cavalcanti

o erro tá dando nesse c:forEach?

<c:forEach var="classificacaoDia" items="${classificacaoDia}">

tem certeza que os itens são o ${classificacaoDia} mesmo? e vc usou o var com o mesmo nome, isso deve dar pau

Lucas_Sorrentino

mas porque ele só da esse pau quando alguma validação é acionada? Se eu mando o onErrorUse pra outra página que não essa, funciona perfeitamente, e se eu entro com dados corretos também… existe algum motivo pra um interferir no outro?

Lucas_Cavalcanti

em qual foreach esse erro tá dando?

Criado 27 de abril de 2010
Ultima resposta 28 de abr. de 2010
Respostas 3
Participantes 2