我试图在我的JSP中使用这段代码来遍历Hashmap。当jsp加载
时 HashMap<Integer, Item> itemsMap = new HashMap<Integer, Item>();
itemsMap = customer1.getItems();
for(Map.Entry<Integer, Item> entry:itemsMap.entrySet()){
Integer k=entry.getKey();
Item item=entry.getValue();
}
以下是我尝试加载jsp时显示的错误
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 159 in the jsp file: /JSP/cart.jsp
Type mismatch: cannot convert from HashMap<Integer,Item> to HashMap<Integer,Item>
156: // HashMap itemsMap = customer1.getItems();
157: // for(Iterator i = itemsMap.keySet().iterator();i.hasNext();){
158: HashMap<Integer, Item> itemsMap = new HashMap<Integer, Item>();
159: itemsMap = customer1.getItems();
160: for(Map.Entry<Integer, Item> entry:itemsMap.entrySet()){
161: Integer k=entry.getKey();
162: Item item=entry.getValue();
当我在servlet中为同样的目的使用它时,相同的代码工作正常。 有人能告诉我这里做错了什么吗?感谢。
这些是相关的类:
public class Customer {
private String name;
private String address;
// private ArrayList<Item> items = new ArrayList<Item>();
private HashMap<Integer,Item> items=new HashMap<Integer,Item>();
public Customer() {
}
public HashMap<Integer,Item> getItems(){ return items;}
}
public static class Item {
private String name;
private String skew;
private String amount;
public Item(String name, String skew, String amount) {
this.name=name; this.skew=skew; this.amount=amount;
}
}
答案 0 :(得分:0)
根据您正在使用的应用服务器,您可以检查从JSP文件生成的Java文件。例如,在Tomcat中,它位于“工作”的某个地方。目录树。当您在调试器会话中右键单击JSP文件并单击诸如&#34;显示Servlet&#34;之类的内容时,某些IDE也可以为您打开它。在上下文菜单中。请注意,当您在调试器会话之外时,这无法工作。
打开此文件后,您可以检查导入及其他所有内容以及它为什么不能编译。
用户Zircon对类型&#34;项目&#34;的评论以及它是否是JSP中的导入之一可能是正确的。我并不担心缺少导入,而是关于应用程序的设计。它是Web开发中非常强大的惯例,用于分离业务逻辑和显示逻辑。
换句话说:在JSP中没有Java代码的情况。所有业务逻辑(这是您的Java代码应该是什么)应该封装在控制器和模型中,或者,如果您需要,也可以封装在您从JSP中实例化的bean中。如果您想迭代某些内容,请使用<c:forEach >
和类似的规定。
如果你坚持在JSP中使用Java,那么至少要使用菱形运算符:HashMap<Integer, Item> itemsMap = new HashMap<>();
这样问题可能会产生更具启发性的编译器或运行时消息。
如果这一切都没有帮助,那么请真正找到从JSP创建的app服务器的servlet文件(.java文件),并将导入部分复制到你的问题中,这样我们才能知道它的类型是什么? ; s试图访问。