Servlet: Checkboxen überprüfen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Servlet: Checkboxen überprüfen

    Hi!

    Ich habe folgendes Servlet erstellt und bekomm es einfach nicht hin, zu prüfen, ob die Checkboxen true oder false sind. Problem ist, dass es sich um Checkboxen in HTML handelt und ich sie in Java auslesen möchte. Aber vielleicht ist das auch gar kein Problem...oder es geht gar nicht! ;) Auf jeden Fall habe ich schon ewig gegooglet und nix gefunden.

    Quellcode

    1. public class InputServlet extends HttpServlet {
    2. public static Request req = new Request();
    3. public static ArrayList list = new ArrayList();
    4. /* (non-Javadoc)
    5. * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    6. */
    7. protected void doGet(HttpServletRequest _request, HttpServletResponse arg1)
    8. throws ServletException, IOException {
    9. arg1.getOutputStream().println("<html>");
    10. arg1.getOutputStream().println("<head>");
    11. arg1.getOutputStream().println("<title>Input</title>");
    12. arg1.getOutputStream().println("</head>");
    13. arg1.getOutputStream().println("<body>");
    14. arg1.getOutputStream().println("<form action='input' name='input'></br>");
    15. arg1.getOutputStream().println("<table border='0'>");
    16. arg1.getOutputStream().println("<tr><td>ID:</td><td><input type='text' name='id'></td></tr>");
    17. arg1.getOutputStream().println("<tr><td>Predecessor:</td><td><input type='text' name='predecessor'></td></tr>");
    18. arg1.getOutputStream().println("<tr><td>State:</td><td><input type='text' name='state'></td></tr>");
    19. arg1.getOutputStream().println("<tr><td>Phase:</td><td><input type='text' name='phase'></td></tr>");
    20. arg1.getOutputStream().println("<tr><td>Preparing:</td><td><input type='checkbox' name='preparing'></td></tr>");
    21. arg1.getOutputStream().println("<tr><td>Processing:</td><td><input type='checkbox' name='processing'></td></tr>");
    22. arg1.getOutputStream().println("<tr><td>Finishing:</td><td><input type='checkbox' name='finishing'></td></tr>");
    23. arg1.getOutputStream().println("<tr><td>Closing:</td><td><input type='checkbox' name='closing'></td></tr>");
    24. arg1.getOutputStream().println("<tr><td>Priority:</td><td><input type='text' name='priority'></td></tr>");
    25. arg1.getOutputStream().println("<tr><td>Associative Name:</td><td><input type='text' name='associativename'></td></tr>");
    26. arg1.getOutputStream().println("<tr><td></td><td><input type='submit' value='Send'></td></tr>");
    27. arg1.getOutputStream().println("</table>");
    28. arg1.getOutputStream().println("</form>");
    29. arg1.getOutputStream().println("</body>");
    30. arg1.getOutputStream().println("</html>");
    31. if (_request.getParameterMap().size() != 0) {
    32. req.setId(_request.getParameter("id"));
    33. list.add(req.getId());
    34. req.setPredecessor(_request.getParameter("predecessor"));
    35. list.add(req.getPredecessor());
    36. req.setState(_request.getParameter("state"));
    37. list.add(req.getState());
    38. req.setPhase(_request.getParameter("phase"));
    39. list.add(req.getPhase());
    40. req.setPreparing(_request.isSecure());
    41. req.setProcessing(_request.isSecure());
    42. req.setFinishing(_request.isSecure());
    43. req.setClosing(_request.isSecure());
    44. req.setPriority(_request.getParameter("priority"));
    45. list.add(req.getPriority());
    46. req.setAssociativename(_request.getParameter("associativename"));
    47. list.add(req.getAssociativename());
    48. }
    49. }
    50. }
    Alles anzeigen


    Vielen Dank im Voraus für eure Hilfe!

    Gruß
    Rantan
  • Moin moin

    Checkboxen in HTML ein ganz tolle Sache sag ich dir. Schlag mich auch aktuell damit rum. Benutze aber für den Zugriff auf Formulre Struts. Macht vieles leichter und besser lesbar ;)

    Kurze erläuterung, warum das ganze nicht ganz so einfach ist, wie man vielleicht denkt:
    Checkboxen können verständlicherweise nur true oder false sein.
    Dummerweise wird nur true bei submit mit übertragen.
    Wenn also eine Checkbox nicht ausgewählt wurde, sieht es für das Programm so aus, als würde dein Formular überhaupt keine Checkbox besitzen.

    Als Lösung würde ich vorschlagen, anzunehmen die Checkbox ist "false" und nur auf "true" zu setzen, wenn auch "true" übertragen wird.

    Hoffe es hilft
    Ubuntu Edgy * Kernel 2.6.17 * Gnome 2.16 * Beryl
    2 x Athlon MP 1900 * MSI K7D Master-L * 1024 MB ECC DDR333
    Hercules 9800XT 256 MB Ram * 1x 250 GB IDE
    Wasserkühlung
  • Hi! Erstmal vielen Dank für die Antwort!

    Die erste Möglichkeit hatte ich schon ausprobiert, das mag er aber nicht, weil das keine String is. Das Problem, dass ich jetzt habe ist immernoch, dass er die Checkbox nicht ausliest. Das heißt, dass der Status immer auf false steht. Und das ganze soll von einer Methode gemacht werden, die ich allerdings vergessen habe zu posten.
    Also werde ich das mal eben nachholen.

    Das bisher bekannte ist die Klasse InputServlet. Diese ist in einem HttpServlet mit dem gleichen Namen. Ich poste sie hier nochmal der Vollständigkeit halber:

    Quellcode

    1. public class InputServlet extends HttpServlet {
    2. public static ArrayList list = new ArrayList();
    3. /* (non-Javadoc)
    4. * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    5. */
    6. protected void doGet(HttpServletRequest _request, HttpServletResponse arg1)
    7. throws ServletException, IOException {
    8. arg1.getOutputStream().println("<html>");
    9. arg1.getOutputStream().println("<head>");
    10. arg1.getOutputStream().println("<title>Input</title>");
    11. arg1.getOutputStream().println("</head>");
    12. arg1.getOutputStream().println("<body>");
    13. arg1.getOutputStream().println("<form action='input' name='input'></br>");
    14. arg1.getOutputStream().println("<table border='0'>");
    15. arg1.getOutputStream().println("<tr><td>ID:</td><td><input type='text' name='id'></td></tr>");
    16. arg1.getOutputStream().println("<tr><td>Predecessor:</td><td><input type='text' name='predecessor'></td></tr>");
    17. arg1.getOutputStream().println("<tr><td>State:</td><td><input type='text' name='state'></td></tr>");
    18. arg1.getOutputStream().println("<tr><td>Phase:</td><td><input type='text' name='phase'></td></tr>");
    19. arg1.getOutputStream().println("<tr><td>Preparing:</td><td><input type='checkbox' name='preparing' value='true'></td></tr>");
    20. arg1.getOutputStream().println("<tr><td>Processing:</td><td><input type='checkbox' name='processing' value='true'></td></tr>");
    21. arg1.getOutputStream().println("<tr><td>Finishing:</td><td><input type='checkbox' name='finishing' value='true'></td></tr>");
    22. arg1.getOutputStream().println("<tr><td>Closing:</td><td><input type='checkbox' name='closing' value='true'></td></tr>");
    23. arg1.getOutputStream().println("<tr><td>Priority:</td><td><input type='text' name='priority'></td></tr>");
    24. arg1.getOutputStream().println("<tr><td>Associative Name:</td><td><input type='text' name='associativename'></td></tr>");
    25. arg1.getOutputStream().println("<tr><td></td><td><input type='submit' value='Send'></td></tr>");
    26. arg1.getOutputStream().println("</table>");
    27. arg1.getOutputStream().println("</form>");
    28. arg1.getOutputStream().println("</body>");
    29. arg1.getOutputStream().println("</html>");
    30. if (_request.getParameterMap().size() != 0) {
    31. Request req = new Request();
    32. req.setId(_request.getParameter("id"));
    33. req.setPredecessor(_request.getParameter("predecessor"));
    34. req.setState(_request.getParameter("state"));
    35. req.setPhase(_request.getParameter("phase"));
    36. req.setPreparing(_request.getParameter("preparing"));
    37. req.setProcessing(_request.isSecure());
    38. req.setFinishing(_request.isSecure());
    39. req.setClosing(_request.isSecure());
    40. req.setPriority(_request.getParameter("priority"));
    41. req.setAssociativename(_request.getParameter("associativename"));
    42. list.add(req);
    43. }
    44. }
    45. }
    Alles anzeigen


    Bei req.setPreparing hat er jetzt folgendes Problem: "The method setPreparing(boolean) in the type Request is not applicable for the arguments (String)".

    Dazu die Klasse Request, die die Methode enthält. Ich lass hier den ganzen Mittelteil mal aus:

    Quellcode

    1. public class Request {
    2. private String id;
    3. private String predecessor;
    4. private String state;
    5. private String phase;
    6. private boolean preparing;
    7. private boolean processing;
    8. private boolean finishing;
    9. private boolean closing;
    10. private String priority;
    11. private String associativename;
    12. private ArrayList inputProducts = new ArrayList();
    13. private ArrayList outputProducts = new ArrayList();
    14. private ArrayList features = new ArrayList();
    15. [...]
    16. /**
    17. * @return Returns the preparing.
    18. */
    19. public boolean isPreparing() {
    20. return preparing;
    21. }
    22. /**
    23. * @param preparing The preparing to set.
    24. */
    25. public void setPreparing(boolean preparing) {
    26. this.preparing = preparing;
    27. }
    Alles anzeigen


    Hier muss also irgendwie der Bezug zur Checkbox fehlen, was an sich ja offensichtlich ist, weil sie nicht genannt wird. Aber ich weiß nicht, wie ich sie da reinkriegen soll. Dazu muss ich sagen, dass das laut Aufgabenstellung möglichst mit der Methode gemacht werden soll, um später noch darauf aufzubauen.

    Gruß Rantan
  • Moin moin

    Hängst du immernoch an dem Problem?
    Aufgefallen, dass du versuchst von String nach boolean zu casten?
    würde empfehlen

    absicht

    Quellcode

    1. if(_request.getParameter("preparing") != null && _request.getParameter("preparing").equals("true")){
    2. req.setPreparing(true);
    3. }
    4. else{
    5. req.setPreparing(false);
    6. }


    Nächste frage wäre natürlich, was willst du überhaupt machen??
    Dein Formular, dass du ausgibst, ist nicht dynamisch. Ich hoffe das ist absicht.

    Mfg
    Ubuntu Edgy * Kernel 2.6.17 * Gnome 2.16 * Beryl
    2 x Athlon MP 1900 * MSI K7D Master-L * 1024 MB ECC DDR333
    Hercules 9800XT 256 MB Ram * 1x 250 GB IDE
    Wasserkühlung