[英]Servlet passing empty array to JSP?
我創建了一個使用登錄頁面,servlet,托管bean和jsp頁面的Web應用程序。 不管我嘗試了什么,我都無法使JSP頁面顯示來自servlet的項目名稱數組,這些項目名稱是使用bean對象的arraylist獲取的。 我什至嘗試只在servlet中創建一個bean對象,然后僅傳遞一個字符串變量。 我嘗試同時使用會話和請求,但無法在這里運行,這是我的代碼:
Servlet:
package xxxx;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ItemServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ItemInventory iI = new ItemInventory();
String[] itemNames = iI.getNames();
HttpSession session = request.getSession();
session.setAttribute("itemNames", itemNames);
request.setAttribute("itemNames", itemNames);
RequestDispatcher rd = request.getRequestDispatcher("/secureApps/ItemsCatalog.jsp");
rd.forward(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
JSP:
<%@page import="xxxx.ItemInventory"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
String[] itemName = (String[])session.getAttribute("itemNames");
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Item Catalog</title>
</head>
<body>
<h1>Item Catalog</h1>
<Select Name="itemNames">
<% for(int i=0;i < itemName.length; i++){
%>
<option value ="<%= itemName[i]%>"><%= itemName[i]%></option>
<%
}
%>
</select>
${itemBean.itemID}
</body>
</html>
豆
package xxxx;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class ItemBean {
String itemName;
String itemID;
String itemDescription;
String itemPrice;
String itemQuantity;
public ItemBean(){}
public ItemBean(String iD, String name, String description, String price, String quantity){
this.itemID = iD;
this.itemName = name;
this.itemDescription = description;
this.itemPrice = price;
this.itemQuantity = quantity;
}
public String getItemName(){
return itemName;
}
}
ItemInventory類:
package xxxx;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class ItemInventory {
ArrayList <ItemBean> items = new ArrayList<ItemBean>();
public static void main(String[] args){}
public void ItemInventory() throws IOException{
BufferedReader br = new BufferedReader(new FileReader("/catalog.txt"));
String text = null;
while ((text=br.readLine())!=null){
String[] itemArray = text.split(",");
items.add(new ItemBean (itemArray[0], itemArray[1], itemArray[2], itemArray[3], itemArray[4]));
}
br.close();
}
public Integer getSize(){
Integer x = items.size();
return x;
}
public String[] getNames(){
int y = items.size();
String[] itemNames = new String[y];
for (int i = items.size() - 1; i >=0; i--){
itemNames[i] = items.get(i).getItemName();
}
return itemNames;
}
}
請幫助,我已經在這里待了幾個小時了。
您沒有提供ItemInventory
代碼,因此很難確認iI.getNames()
真的返回了一個包含數據的數組。
該代碼對我來說似乎是正確的,因此如果iI.getNames()
返回數據,它應該可以工作。
檢查陣列的長度。
另外,我看到您期望有itemBean
但會話或請求范圍中未提供。
同樣, itemBean
也未在servlet上使用。
我想念什么嗎?
您的Servlet / JSP代碼沒有錯。
在這里, int y = items.size();
如您先前所初始化,它將始終返回0
。
您在這里誤解了一些概念。 創建類的對象時, main()
不會直接執行。 因此,在這種情況下,它返回空數組。
您應該從main()
刪除代碼,並可以編寫一個單獨的方法來做到這一點。 另外,在構造函數中包含業務邏輯是一種不好的做法
示例:ItemInventory.java
public void fillItems(){
try{
BufferedReader br = new BufferedReader(new FileReader("/catalog.txt"));
String text = null;
while ((text=br.readLine())!=null){
String[] itemArray = text.split(",");
// you might want to check array size
items.add(new ItemBean (itemArray[0], itemArray[1], itemArray[2], itemArray[3], itemArray[4]));
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
在Servlet中
ItemInventory iI = new ItemInventory();
iI.fillItems();
String[] itemNames = iI.getNames();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.