J'ai deux arraylists dans ma classe et je veux l'envoyer à mon JSP, puis itérer les éléments dans arraylist dans une balise select.
Voici ma classe:
package accessData;
import Java.util.ArrayList;
public class ConnectingDatabase
{
ArrayList<String> food=new ArrayList<String>();
food.add("mango");
food.add("Apple");
food.add("grapes");
ArrayList<String> food_Code=new ArrayList<String>();
food.add("man");
food.add("app");
food.add("gra");
}
Je veux itérer food_Code en tant qu'options dans les balises select et food en tant que valeurs dans les balises select dans JSP; mon JSP est:
<select id="food" name="fooditems">
// Don't know how to iterate
</select>
Tout morceau de code est hautement apprécié. Merci d'avance :)
Il serait préférable d’utiliser un Java.util.Map
pour stocker la clé et les valeurs au lieu de deux ArrayList
, comme:
Map<String, String> foods = new HashMap<String, String>();
// here key stores the food codes
// and values are that which will be visible to the user in the drop-down
foods.put("man", "mango");
foods.put("app", "Apple");
foods.put("gra", "grapes");
// if this is your servlet or action class having access to HttpRequest object then
httpRequest.setAttribute("foods", foods); // so that you can retrieve in JSP
Maintenant, pour itérer la carte dans l'utilisation de JSP:
<select id="food" name="fooditems">
<c:forEach items="${foods}" var="food">
<option value="${food.key}">
${food.value}
</option>
</c:forEach>
</select>
Ou sans JSTL:
<select id="food" name="fooditems">
<%
Map<String, String> foods = (Map<String, String>) request.getAttribute("foods");
for(Entry<String, String> food : foods.entrySet()) {
%>
<option value="<%=food.getKey()%>">
<%=food.getValue() %>
</option>
<%
}
%>
</select>
Pour en savoir plus sur l'itération avec JSTL, voici un bon SO réponse et voici un bon tutoriel sur l'utilisation de JSTL en général.
Vous pouvez utiliser JSTL pour chaque.
<c:forEach items="${foodItems}" var="item">
${item}
</c:forEach>
Vous devez également importer le noyau JSTL:
<%@ taglib prefix="c"
uri="http://Java.Sun.com/jsp/jstl/core" %>
<c:forEach items="${list}" var="foodItem">
${foodItem.propertyOfBean}
</c:forEach>
Cela résoudra votre problème.
Cela peut être fait de différentes manières (avec quelques modifications dans votre schéma)
Utilisation de JSTL:
Créez un bean avec deux champs comme food
et food_code
classe publique Food { nourriture privée String; private String food_code; // Setter/getters suit }
Maintenant, l'arraylist disponible sur la page sera une liste d'objets Food
. Dans le code JSP, vous pouvez utiliser les éléments suivants:
<select name="fooditems">
<c:forEach items="${list}" var="item">
<option value="${item.food_code}">${item.food}</option>
</c:forEach>
</select>
Si vous utilisez des entretoises:
<html:select property="fooditems" >
<html:optionsCollection property="list" label="food" value="food_code" />
</html:select>
Ici list
est la clé d'objet qui sera utilisée pour extraire la liste du contexte (page/session)
Vous pouvez récupérer la liste dans JSP en tant que
<select id="food" name="fooditems">
<c:forEach items="${listname}" var="food" >
<option value="${food}"> ${food} </option>
</c:forEach>
</select>