bean:iterate und eine Map

Baciman

Mitglied
Hallo,
ich bin ein Neuling in Sachen Struts und komme bei meinem Projekt nicht ganz klar.
In der API habe ich gelesen, dass ich für den iterate-Tag extra getter-Methoden brauche, um aus der Map die Values zu bekommen.

Irgendwie haut das bei mir nicht so hin und ich finde den Fehler nicht :(
Könnt ihr mir da helfen?

meine jsp-sieht wie folgt aus:
Code:
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ page import="shoputils.EmmaShop,products.GetCategoryBean"%>

<% request.setAttribute("category",EmmaShop.getEmmaCatalog().getCategory()); %>

<h1> Kategorien </h1>
<logic:notEmpty name="category">
    <table>
	<logic:iterate name="category" id="item" >
         <tr>
         	<td><bean:write name="item" property="value(key)"/></td>
         	<td><html:link page="productSite.do?"><bean:write name="item" property="key"/></html:link></td>
            
         </tr>
	</logic:iterate>
    </table>
</logic:notEmpty>

die Methode getCatalog(), sammelt alle Produktkategorien, sowie ein Zufallsbild von den Produkten. Die Ausgabe funktioniert einwandfrei.
Code:
public Map<String,String> getCategory(){
		Map<String,String> mapCat = new HashMap<String,String>();
		Iterator<CatalogItem> iter = iterator(null,true);
		Iterator<CatalogItem> iter2 = iterator(null,true);
		Set<String> setUrl = new HashSet<String>();
		Random generator = new Random();
		
		
		while (iter.hasNext()){
			Product prod = (Product)iter.next();
			String cat = prod.getCategory();
			GetCategoryBean catBean = new GetCategoryBean();
			
			while (iter2.hasNext() && !mapCat.containsKey(cat) ){
				Product prod2 = (Product)iter2.next();
				if (prod2.getCategory().equals(cat)){
					setUrl.add(prod2.getPicUrl());
				}
			}
			if (!mapCat.containsKey(cat)){
			Object[] arrayUrl = setUrl.toArray();
			String picUrl = (String)arrayUrl[generator.nextInt(arrayUrl.length-1)];
			mapCat.put(cat,picUrl);
			catBean.setCategory(mapCat);
			}
		}
		return mapCat;
	}

und dann dachte ich dass ich eine extra Klasse brauch, wo ich nun die Values auslesen kann mit der getter-Methode
Code:
package products;

import java.util.Map;

import org.apache.struts.action.ActionForm;

public class GetCategoryBean extends ActionForm {
	
	private Map<String,String> category;

	public Map<String, String> getCategory() {
		return category;
	}

	public void setCategory(Map<String, String> category) {
		this.category = category;
	}
	
	public String getValue(String key) {
		return category.get(key);
	}
	
}

Könnt ihr mir da weiterhelfen?
Ich bekomme immer denFehler:
Code:
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Invalid access looking up property: "value(key)" of bean: "item"
	at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:871)
 
keine EIne Hilfe?
ich habe das nun noch einmal anders gemacht und bekomme folgednen Fehler:

Code:
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: No getter method for property: "Url" of bean: "item"

meine jsp
Code:
<% request.setAttribute("category",EmmaShop.getEmmaCatalog().getCategory()); %>

<h1> Kategorien </h1>
<logic:notEmpty name="category">
    <table>
	<logic:iterate name="category" id="item">
         <tr>
       		<td><bean:write name="item" property="Url"/></td>
         	<td><bean:write name="item" property="key"/></td>
            
         </tr>
	</logic:iterate>
    </table>
</logic:notEmpty>

und die GetCategoryBean.java
Code:
public class GetCategoryBean {
	
	private String url;
	
	public GetCategoryBean(String url){
		this.url = url;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
		
}

und die getCategory-methode aus meiner product.java
Code:
public Map<String,GetCategoryBean> getCategory(){
		Map<String,GetCategoryBean> mapCat = new HashMap<String,GetCategoryBean>();
		Iterator<CatalogItem> iter = iterator(null,true);
		Iterator<CatalogItem> iter2 = iterator(null,true);
		Set<String> setUrl = new HashSet<String>();
		Random generator = new Random();
		
		
		while (iter.hasNext()){
			Product prod = (Product)iter.next();
			String cat = prod.getCategory();
						
			while (iter2.hasNext() && !mapCat.containsKey(cat) ){
				Product prod2 = (Product)iter2.next();
				if (prod2.getCategory().equals(cat)){
					setUrl.add(prod2.getPicUrl());
				}
			}
			if (!mapCat.containsKey(cat)){
			Object[] arrayUrl = setUrl.toArray();
			String picUrl = (String)arrayUrl[generator.nextInt(arrayUrl.length)];
			mapCat.put(cat,new GetCategoryBean(picUrl));
			}
		}
 

Neue Beiträge

Zurück