2013-04-19 2 views
0

Я создал веб-приложение, которое использует страницу входа, сервлет, управляемый компонент и страницу jsp. Независимо от того, что я пытался, я не могу заставить страницу JSP отображать массив имен элементов из моего сервлета, которые были приобретены с использованием arraylist объектов bean. Я даже попытался создать только один объект bean в сервлете, а затем передал только строковую переменную. Я попытался с помощью как сеанса и запрос и не может получить эту работу здесь мой код:Сервлет, передающий пустой массив JSP?

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; 
} 

} 

Пожалуйста, помогите, я был на этом в течение нескольких часов ....

+0

ли вы проверили размер 'itemNames.length' в Servlet? –

+0

Просто сделал, и он возвращается, как 0 ..... теперь я еще более смущен – ssgtob1

+0

Да. 'ItemInventory iI = new ItemInventory();' Что там происходит? –

ответ

0

Нет ничего плохого в вашем коде 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(); 
+0

Я попытался удалить основной() тоже .... нет go – ssgtob1

+0

Он работает, вроде. Теперь я должен выяснить путь моего файла при использовании netbeans ... – ssgtob1

0

Вы не предоставили код ItemInventory так трудно подтвердить, если iI.getNames() действительно возвращает массив, имеющий данные.

Код выглядит правильно, поэтому он должен работать, если iI.getNames() вернуть данные.

Проверьте длину массива.

Также я вижу, что вы ожидаете itemBean, но не указаны в области сеанса или запроса.

Также itemBean также не используется на сервлете.

Я что-то не хватает?

+0

Просто добавил класс ItemInventory ..... – ssgtob1

+0

Я также попытался создать только новый ItemBean в классе ItemInventory с переданными 5 строками и getNames, возвращающим только строку, но это не сработает. – ssgtob1

+0

Вы отлаживали свой код для чтения файла? Имеет ли файл контент и действительно ли он заполняет элементы ArrayList? –

Смежные вопросы