Java servlet two attributes one servlet and one redirect

Cao svima,
Treba mi mala pomoc oko jave. Kao prvo pocetnik sam u javi ali ne mogu reci da sam pocetnik sa racunarima, tako da sigurno sam dobrooo trazio na ovakav problem, ali mozda ja to sustinski nisam shvatio.
Radim neki test-domaci-probni zadatak za brata.
Problem je sledeci. Iscitao sam bazu na web stranici i napravio da kad se klikne na prvo polje kao padajuci meni odradi sortiranje. E sad ja sam hteo da jedan od dva parametra (ne oba u isto vreme) prosledim servletu i tamo pozovem metodu da odradi filtriranje i da vrati novu filtriranu listu.
Ako kliknem na prvi filter sve je ok. Cim kliknem na drugi filter dobijem praznu listu.
A pored svega toga kad u filteru odaberem rec koja ima nase slovo naravno to ne radi jer u javi dobijem hijeroglife umesto ćčš.
evo servlet koda:

[CODE]@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filterDobavljac = request.getParameter(“grupa1”);
String filterKategorija = request.getParameter(“grupa2”);

System.out.println("FilterDobavljac:" + "'" + filterDobavljac + "'");
System.out.println("FilterKategorija:" + "'" + filterKategorija + "'");

HttpSession sesija = request.getSession(true);

if (!filterDobavljac.equals("ALL") || !filterDobavljac.equals("")) {

    sesija.setAttribute("proizvodi", Baza.FiltriranjeProizvodaGrupa1(filterDobavljac).values());
}

if (!filterKategorija.equals("ALL") || !filterKategorija.equals("")) {

    sesija.setAttribute("proizvodi", Baza.FiltriranjeProizvodaGrupa2(filterKategorija).values());
}

System.out.println("FilterDobavljac:" + "'" + filterDobavljac + "'");
System.out.println("FilterKategorija:" + "'" + filterKategorija + "'");
response.sendRedirect("proizvodi.jsp");

}
}

System.out.println - are here only for fast debug[/CODE]

Iz klase za bazu:

[CODE]public static Hashtable<Integer,Proizvod> FiltriranjeProizvodaGrupa1(String filter){
System.out.println(filter);
Hashtable<Integer,Proizvod> proizvodiFiltered = new Hashtable<Integer, Proizvod>();

if (!filter.equals("ALL")) {
    for (Proizvod p : proizvodi.values()) {
        if (p.getGrupa1().getNaziv().equals(filter)) {
            proizvodiFiltered.put(p.getId(), p);
        }
    }return proizvodiFiltered;
}
return proizvodi;

}[/CODE]
isti je takav i za drugi filter.

web code:

[CODE]

    <table class="center style">
        <tr>
            <th>Bar kod</th>
            <th>Sifra</th>
            <th>Naziv</th>
            <th>kolicina</th>
            <th>Dobavljac</th>
            <th>Kategorija</th>
            <th>Cena</th>
        </tr>
        <tr>
            <td>
                <select>
                    <c:forEach items="${proizvodi}" var="m">
                        <option style="display:none"></option>
                        <option value="${m.barkod}">
                            ${m.barkod}
                        </option>
                    </c:forEach>
                </select>
            </td>
            <td>
                <select>
                    <c:forEach items="${proizvodi}" var="m">
                        <option style="display:none"></option>
                        <option value="${m.sifra}">
                            ${m.sifra}
                        </option>
                    </c:forEach>
                </select>
            </td>
            <td>
                <select>
                    <c:forEach items="${proizvodi}" var="m">
                        <option style="display:none"></option>
                        <option value="${m.naziv}">
                            ${m.naziv}
                        </option>
                    </c:forEach>
                </select>
            </td>
            <td></td>
            <td>
                <select id="grupa1" name="grupa1" onchange="return setValue();">
                    <option style="display:none"></option>
                    <option>ALL</option>
                    <c:forEach items="${grupa1Filter}" var="g1">
                        <option value="${g1}">
                            ${g1}
                        </option>
                    </c:forEach>
                </select>
            </td>
            <td>
                <select id="grupa2" name="grupa2" onchange="return setValue();">
                    <option style="display:none"></option>
                    <option>ALL</option>
                    <c:forEach items="${grupa2Filter}" var="g2">
                        <option value="${g2}">
                            ${g2}
                        </option>
                    </c:forEach>
                </select>
            </td>
            <td></td>

        </tr>
        <c:forEach items="${proizvodi}" var="p">
            <tr>
                <td>${p.barkod}</td>
                <td>${p.sifra}</td>
                <td>${p.naziv}</td>
                <td>${p.kolicina}</td>
                <td>${p.grupa1.naziv}</td>
                <td>${p.grupa2.naziv}</td>
                <td>${p.cena}</td>
            </tr>
        </c:forEach>
    </table>
    <input type="hidden" name="dropdown" id="dropdown">
    <input type="submit" value="Filter" name="btn_dropdown">
</form>
[/CODE]

javascript code:

function setValue() { document.getElementById("dropdown").value = document.getElementById("grupa1").value; document.getElementById("dropdown").value = document.getElementById("grupa2").value; document.productForm.submit(); return true; }

Svaka pomoc je dobrodosla. Hvala puno.

Jel mozes da okacis kod i za drugi filter? Takodje, da li debagovao da vidis da li ti je lista prazna na backend-u (u servletu) ?

Pa za drugi filter je maletne identican ali posto je drugacija lista u pitanju evo ga:

[CODE]public static Hashtable<Integer,Proizvod> FiltriranjeProizvodaGrupa2(String filter){
System.out.println(filter);
Hashtable<Integer,Proizvod> proizvodiFiltered = new Hashtable<Integer, Proizvod>();

    if (!filter.equals("ALL")) {
        for (Proizvod p : proizvodi.values()) {
            if (p.getGrupa2().getNaziv().equals(filter)) {
                proizvodiFiltered.put(p.getId(), p);
            }
        }return proizvodiFiltered;
    }
    return proizvodi;
}[/CODE]

Sad sam skontao da sam napravio gresku prilikom opisivanja problema.
Kad kliknem na prvi filter (filterDobavljac) bude prazno, a kad kliknem na drugi (filterKategorija) izlista mi ok.

Kad zakomentarisem drugi if u servletu prvi mi radi ok.

Da li je Baza.FiltriranjeProizvodaGrupa2(filterKategorija).values() u servletu prazno?

A kako da proverim da li je prazno?
sa obicnim system.out.print?

Mozes i tako, ali je najbolje da naucis da radis u debug modu :slight_smile:

Ok. Evo provereno. Znaci probao sam kad selektujem prvi filter grupa1 ispise mi u terminalu sve kako treba ali ne ubaci u sesiju tj komanda : sesija.setAttribute("proizvodi", proizvodiLista); ne radi.
malo sam izmenio deo u servletu da bih mogao da pohvatam. Evo ga izmenjeni deo:

[CODE]protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession sesija = request.getSession();
sesija.setAttribute(“proizvodi”, Baza.proizvodi.values());
String filterDobavljac = request.getParameter(“grupa1”);
String filterKategorija = request.getParameter(“grupa2”);
Collection proizvodiLista;

    System.out.println("FilterDobavljac:" + "'" + filterDobavljac + "'");
    System.out.println("FilterKategorija:" + "'" + filterKategorija + "'");
    System.out.println( "JVM encoding: " +System.getProperty( "file.encoding"));
  
    if (!filterDobavljac.equals("ALL") || !filterDobavljac.equals("")) {
        proizvodiLista = Baza.FiltriranjeProizvodaGrupa1(filterDobavljac).values();
        sesija.setAttribute("proizvodi", proizvodiLista);
        for (Proizvod p : proizvodiLista) {
            System.out.println(p);
        }
        //response.sendRedirect("proizvodi.jsp");
    }
    System.out.println("XXXXXXXXXXX");
  
    if (!filterKategorija.equals("ALL") || !filterKategorija.equals("")) {
        proizvodiLista = Baza.FiltriranjeProizvodaGrupa2(filterKategorija).values();
        sesija.setAttribute("proizvodi", proizvodiLista);
        for (Proizvod p : proizvodiLista) {
            System.out.println(p);
        }
      
    }
  
    System.out.println("FilterDobavljac:" + "'" + filterDobavljac + "'");
   System.out.println("FilterKategorija:" + "'" + filterKategorija + "'");
  
    response.sendRedirect("proizvodi.jsp");
}[/CODE]

Primetio sam u debug modu u HTTP Server Monitor da kad selektujem prvi filter grupa1 u tabu Session mi izbaci da mi je variabla na sesiji proizvodi prazna, ne znam zasto evo je slika:
debug.JPG

U servletu zakomentarisi poslednju liniju:

response.sendRedirect("proizvodi.jsp");

i dodaj ovaj kod:

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/proizvodi.jsp"); requestDispatcher.forward(request, response);