javax.servlet.ServletException: javax.servlet.jsp.JspTagException: vous Ne savez pas comment itérer à travers fourni “articles” dans <forEach>
J'ai un Haricot qui détient les résultats. J'ai besoin d'utiliser JSTL pour itérer sur elle et de présenter les résultats. Ici, c'est le haricot:
public class DetResults
{
private List<String> headings;
private List<Class<?>> types;
private List<Object[]> data;
public DetResults() {}
public List<String> getHeadings() { return this.headings; }
public String getHeading(int which) { return this.headings.get(which); }
public List<Class<?>> getTypes() { return this.types; }
public Class<?> getType(int which) { return this.types.get(which); }
public List<Object[]> getData( ) { return this.data; }
public Object[] getDataAtRow( int row ) { return this.data.get(row); }
public void setHeadings( List<String> val ) { this.headings = val; }
public void setHeadings( String[] val ) { this.headings = Arrays.asList(val); }
public void addHeading( String val )
{
if( this.headings == null ) this.headings = new ArrayList<String>();
this.headings.add(val);
}
public void setTypes( List<Class<?>> val ) { this.types = val; }
public void setTypes( Class<?> val[] ) { this.types = Arrays.asList(val); }
public void addType( Class<?> val )
{
if( this.types == null ) this.types = new ArrayList<Class<?>>();
this.types.add(val);
}
public void setData( List<Object[]> val ) { this.data = val; }
//allow NPE to get thrown
public void setDataAtRow( Object[] val, int row ) { this.data.set(row, val); }
public void appendDataRow( Object[] val )
{
if( data == null ) data = new ArrayList<Object[]>();
this.data.add(val);
}
public int getColumnCount() { return this.headings!=null?this.headings.size():0; }
}
Ici, c'est le gestionnaire qui va définir la fève à la JSP:
DetResults results = detDAO.fetchDetResults(paramBean);
request.setAttribute("results", results);
action.setJspURI(".../.jsp");
J'ai essayé de l'afficher comme suit:
<c:forEach var="results" items="${results}">
${results.heading}
</c:forEach>
Mais il a jeté l'exception suivante:
Causés par: javax.servlet.ServletException: javax.servlet.jsp.JspTagException: vous Ne savez pas comment itérer à travers fourni "articles" dans <forEach>
Si je consigner les résultats sur mon gestionnaire de la page comme ceci:
System.out.println( "\n\nthere are " + results.getColumnCount() + " columns in the result set" );
for( int i=0; i<results.getColumnCount(); i++ )
{
System.out.println( results.getHeading(i) + " --> " + results.getType(i) );
}
L'enregistrement semble montrer fines sur le serveur.
vous pouvez poster la trace de la pile?
ouais donnez-moi une minute pour l'exécuter à nouveau
La description du problème "c'est fait exploser à chaque fois que je le rendu de la page jsp" et "et la page cassé :(" loin de faciliter la compréhension du problème concret. Ne pas décrire le problème à partir de l'utilisateur final, mais du point de vue du développeur.
Juste ajouté erreur instack trace
Mauvaise idée, le nom de la variable la même chose que vous avez à parcourir--très déroutant. En tout cas, si c'est une instance de
ouais donnez-moi une minute pour l'exécuter à nouveau
La description du problème "c'est fait exploser à chaque fois que je le rendu de la page jsp" et "et la page cassé :(" loin de faciliter la compréhension du problème concret. Ne pas décrire le problème à partir de l'utilisateur final, mais du point de vue du développeur.
Juste ajouté erreur instack trace
Mauvaise idée, le nom de la variable la même chose que vous avez à parcourir--très déroutant. En tout cas, si c'est une instance de
DetResults
c'est dans results
, bien sûr, vous ne pouvez pas effectuer une itération sur elle--vous auriez besoin pour effectuer une itération sur l'un de ses collections. Et si elle est parallèle à l'aide de trois listes, c'est de faire le mal.
OriginalL'auteur Doc Holiday | 2012-02-03
Vous devez vous connecter pour publier un commentaire.
Qui va se passer quand la
<c:forEach items>
ne fait pas référence à un objet valide sur laquelle il peut itérer. L'objet doit être unObject[]
(un simple tableau), unCollection
,Map
,Iterator
,Énumération
ouString
(voir aussi le code source). Rien d'autre ne peut pas être réitéré par<c:forEach>
. VotreDetResults
classe n'est pas une instance de l'un des types mentionnés ci-dessus, de sorte que ce sera un échec.Votre
DetResults
classe ne regarde pas à droite. Il regarde un peu comme un Dieu bean avec une collection de toutes les propriétés de plusieurs entités individuelles. Ce n'est pas juste. Une classe d'haricot devrait représenter plus qu'une seule entité. Réécrire votreDetResults
classe de sorte que vous avez jusqu'à la fin avec un fullworthy collection de javabeans:de sorte que vous pouvez accéder comme suit:
Si vous avez vraiment insister pour garder votre
DetResults
bean comme il est, vous pouvez accéder comme suit:Voir aussi:
Sans rapport avec au problème concret, le
<c:forEach var>
attribut n'est pas droit. Vous ne devriez pas lui donner le même nom qu'un objet existant dans le champ d'application. Il ne serait d'affrontement. Mais c'est un sujet pour une nouvelle question si vous ne pouvez pas interpréter le message d'erreur.Puis il suffit de le faire. Votre
DetResults
classe est toutefois de poisson. Je pense que vous devriez plutôt de le réécrire unDetResult
classe qui a les propriétésheading
,type
, les données, etc and then have a
Liste<DetResult>`.Je devrais peut-être essayer ça
J'ai mis à jour la réponse avec quelques exemples simples et utiles "Voir aussi" des liens.
merci beaucoup...moi j'aurais plutôt été dans une liste, mais le gars qui est la construction de th back-end, dit qu'il a à être de cette façon pour l'instant....merci frère!
OriginalL'auteur BalusC
Vous devriez être en mesure d'effectuer une itération sur les en-têtes de
Puis sur les données...
Ou quelque chose le long de ces lignes?
javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach> at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:255) at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:219)
Ah, désolé. Je pense qu'il y a probablement un moyen de le faire fonctionner avec le haricot que vous avez, mais les autres ont raison quand ils disent que la refonte de la fève serait mieux.
OriginalL'auteur EMS
Vérifier ce code ci-dessous dans la classe de servlet:
Et même doit correspondre dans la page JSP dans
<c:forEach
:REMARQUE:
"productList"
nom doit correspondre exactement à 1 point 1 et 2puis il va.
Il a travaillé pour moi.
productList
.OriginalL'auteur Kanhaiya