Bueno a ver explico el problema que tengo a ver si puedo solucionarlo ya que llevo varios dias y estoy un poco atascado. La idea es que yo lea un fichero excel de mi escritorio por ejemplo y que saque los datos en una jsp con ese formato. Lo de leer el fichero en un metodo Java lo tengo echo y me funciona guay me trae los datos y todo eso el problema viene cuando llamo a la jsp me da el error "
javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>", entonces ese es mi problema, os voy a pegar los trozos de codigo que tengo echos sobretodo del metodo y la jsp, y de 2 bean que en uno controlo las filas y otro las celdas a ver si alguien me pudiera ayudar.
Metodo de lectura del fichero
Código:
Metodo que llama al de leer el fichero
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception{
ModelAndView mav = new ModelAndView("documentacionAnualidadListaExcelView");
// SpsiExpedienteBuscador buscadorSpsiExpediente = (SpsiExpedienteBuscador) request.getSession().getAttribute("buscadorSpsiExpediente");
Anualidad anualidad = new Anualidad();
File file = new File("C:/Documents and Settings/david.gomez/Escritorio/Libro1.xls");
leeArchivo(file, anualidad);
mav.addObject("anualidad",anualidad);
return mav;
}
@SuppressWarnings("unchecked")
protected Vector leeArchivo(File file, Anualidad anualidad){
Vector informacionArchivo = new Vector();
POIFSFileSystem poifsFileSystem = null;
try {
poifsFileSystem = new POIFSFileSystem(new FileInputStream(file));
}catch (FileNotFoundException ex) {
ex.printStackTrace();
}catch (IOException ex) {
ex.printStackTrace();
}
HSSFWorkbook hssfWorkbook = null;
try{
hssfWorkbook = new HSSFWorkbook(poifsFileSystem);
}catch (IOException ex) {
ex.printStackTrace();
}
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);
// buscadorSpsiExpediente.setFilas((Collection)hssfSheet.rowIterator());
Iterator it = hssfSheet.rowIterator();
while(it.hasNext()){
Filas fila = new Filas();
//Recorro datos de fila en fila
HSSFRow hssfRow = (HSSFRow)it.next();
Vector informacionFila = new Vector();
//Me recorro todos los elementos de una fila
for(short i = hssfRow.getFirstCellNum(); i < hssfRow.getLastCellNum(); i++){
HSSFCell hssfCell = hssfRow.getCell(i);
//Si la celda es nula meter un blanco en la celda
if(hssfCell == null){
informacionFila.add("");
}
if(hssfCell != null){
Celdas celdaAux = null;
switch(hssfCell.getCellType()){
case HSSFCell.CELL_TYPE_BLANK:
informacionFila.add("");
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
informacionFila.add(hssfCell.getBooleanCellValue());
celdaAux = new Celdas(i, String.valueOf(hssfCell.getBooleanCellValue()));
break;
case HSSFCell.CELL_TYPE_FORMULA: informacionFila.add(hssfCell.getNumericCellValue());
celdaAux = new Celdas(i, String.valueOf(hssfCell.getNumericCellValue()));
break;
case HSSFCell.CELL_TYPE_NUMERIC: informacionFila.add(hssfCell.getNumericCellValue());
celdaAux = new Celdas(i, String.valueOf(hssfCell.getNumericCellValue()));
break;
case HSSFCell.CELL_TYPE_STRING: informacionFila.add(hssfCell.getStringCellValue());
celdaAux = new Celdas(i, hssfCell.getStringCellValue());
break;
default: break;
}
//Se añaden los valores de las celdas a la fila
fila.getFilas().add(celdaAux);
}
}
//Se añade la informacion de cada fila al archivio
anualidad.getFilas().add(fila);
informacionArchivo.add(informacionFila);
}
return informacionArchivo;
}
Aqui dejos los bean de Filas y Celdas
Código:
public class Filas {
private Collection<Celdas> filas;
public Filas(){
this.filas = new ArrayList<Celdas>(0);
}
public Collection<Celdas> getFilas() {
return filas;
}
public void setFilas(Collection<Celdas> filas) {
this.filas = filas;
}
}
public class Celdas {
private short posicion;
private String celdas;
public Celdas(short posicion, String celdas){
this.posicion = posicion;
this.celdas = celdas;
}
public String getCeldas() {
return celdas;
}
public void setCeldas(String celdas) {
this.celdas = celdas;
}
public short getPosicion() {
return posicion;
}
public void setPosicion(short posicion) {
this.posicion = posicion;
}
}
Aqui dejo el codigo de la JSP
Código:
<%@ include file="../comun/include.jsp" %>
<%@ page import="es.mcu.iphe.sigi.util.*" %>
<!-- Set the content type header with the JSP directive -->
<%@ page contentType="application/vnd.ms-excel" %>
<!-- Set the content disposition header -->
<% response.setHeader("Content-Disposition", "attachment; filename=\"C:/Documents and Settings/xxx/Escritorio/Libro1.xls\""); %>
<form:form commandName="anualidad">
<h2><fmt:message key="lit.bien.titulo"/> - Modificación del Excel</h2>
<div class="bloque">
<table border="1" cellpadding="0" cellspacing="0" class="tblResultados" id="admUsuResultados">
<caption>Modificar Datos del Excel</caption>
<c:out value="${filas}"/>
<c:forEach var="fila" items="${anualidad.filas}">
<tr>
<c:forEach var="celda" items="${fila}">
<td class="txto">
<c:out value="${celda.celdas}"/>
</td>
</c:forEach>
</tr>
</c:forEach>
</table></br>
<input type="submit" value="Modificar"/>
</div>
</form:form>
Aqui dejo el objeto que tiene como uno de sus atributos las filas del archivo
Código:
Dejo unicamente los GET y SET del atributo en si que la clase es muy grande
private ArrayList<Filas> filas = new ArrayList<Filas>(0);
public ArrayList<Filas> getFilas() {
return filas;
}
public void setFilas(ArrayList<Filas> filas) {
this.filas = filas;
}
Y yo creo que no se me olvida nada de lo que estoy tocando a ver si alguien me pudiera ayudar a solucionarlo que esty enbuclao en el problema...
Gracias