ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
777
777
EMPFEHLEN
-
HI
Ich habe eine Kleine Web Anwendung zur Übung Geschrieben, nun bin ich dabei alles von JSP mit Java Code zu JSP mit JSTL umzustellen.
Mein Katalog meines kleinen Buchshops funktioniert soweit mit JSTL nur wenn ich nun vom Katalog zum Warenkorb Wechsel findet das JSP die Java Methoden nicht
Mein Warenkorb.jsp
Mein ControllerHTML-Code:<jsp:useBean id="warenkorb" scope="session" class="model.Warenkorb" /> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <?xml version="1.0" encoding="ISO-8859-1" ?> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" import="model.*,java.text.DecimalFormat"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@page import="controler.ControllerAction"%><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Warenkorb.jsp</title> </head> <body> <%@ include file="/view/Banner.jsp"%> <c:set var="warenkorb" value="${sessionScope.warenkorb}"/> <em>Es befinden sich <c:out value="${warenkorb.anzahlbuecher}"></c:out> Elemente im Warenkorb.</em> <br /> <br /> <table> <tr> <th colspan="4">Warenkorb</th> </tr> <c:forEach items="${warenkorb.warenkorbelemente}" var="element"> <tr> <td> ${element.anzahl} x</td> <td> ${element.buch.autor} </td> <td><a href="Controller?action=<%=ControllerAction.BUCH_ANZEIGEN.getAction()%>&isbn= ${element.buch.isbn}"> ${element.buch.buch} </a></td> <td> ${element.gesamtpreis} €</td> <td><a href="Controller?action=<%=ControllerAction.BUCH_HERAUSNEHMEN.getAction()%>&isbn=${element.buch.isbn}"> Buch löschen </a></td> </tr> </c:forEach> <tr> <td colspan="3"><strong>Gesamtpreis</strong></td> <td> ${warenkorb.gesamtpreis}) €</td> </tr> </table> <a href="Controller?action=<%=ControllerAction.KATALOG_ANZEIGEN.getAction()%>"> « zurück zum Katalog </a> <a href="Controller?action=<%=ControllerAction.BUCH_BESTELLEN.getAction()%>"> Bücher bestellen → </a> </body> </html>
ich weiß mein Warenkorb kommt mindestens bis zum Controller. Fehler sind wenn entweder Zwischen Controller oder direckt im JSPCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
package controler; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import model.Buch; import model.Katalog; import model.Warenkorb; /** * Servlet implementation class BuchladenServlet */ public class Controller extends HttpServlet { /** * */ private static final long serialVersionUID = 58268476537320082L; public static String KATALOG = "web.model.Katalog"; public static String WAHRENKORB = "web.model.Warenkorb"; private Katalog katalog; private Warenkorb warenkorb; private Buch buch; private RequestDispatcher requestDispatcher; private HttpSession httpSession; private HttpServletRequest request; private HttpServletResponse response; private ServletContext context; /** * @see HttpServlet#HttpServlet() */ public Controller() { super(); } public void init() { } public void destroy() { } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.request = request; this.response = response; this.httpSession = this.request.getSession(); this.context = getServletContext(); this.warenkorb = (Warenkorb) this.httpSession.getAttribute("warenkorb"); if (warenkorb == null) { this.warenkorb = new Warenkorb(); this.httpSession.setAttribute("warenkorb", warenkorb); } this.katalog = (Katalog) this.context.getAttribute("katalog"); if (katalog == null) { this.katalog = Katalog.erzeuge(); this.context.setAttribute("katalog", katalog); } String actionParameter = request.getParameter("action"); ControllerAction action = getAction(actionParameter); String isbn = request.getParameter("isbn"); switch (action) { case KATALOG_ANZEIGEN: default: katalogAnzeigen(); break; case BUCH_ANZEIGEN: zeigeBuchInfoAn(isbn); break; case BUCH_HINZUFUEGEN: fuegeBuchinWarenkorbHinzu(isbn); break; case BUCH_HERAUSNEHMEN: nehmeBuchAusWarenkorbHeraus(isbn); break; case WARENKORB_ANZEIGEN: warenkorbAnzeigen(); break; case BUCH_BESTELLEN: bestellungabschicken(); break; } } private void bestellungabschicken() throws ServletException, IOException { request.setAttribute("warenkorbElemente", warenkorb .getWarenkorbElemente()); forwardTo("/Bestellen"); } /** * @throws IOException * @throws ServletException * */ private void katalogAnzeigen() throws ServletException, IOException { request.setAttribute("katalogBuecher", katalog.getAlleBuecher()); forwardTo("/Katalog"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } private void zeigeBuchInfoAn(String isbn) throws ServletException, IOException { buch = katalog.getBuchInfo(isbn); request.setAttribute("buch", buch); forwardTo("/Buch"); } private void fuegeBuchinWarenkorbHinzu(String isbn) throws ServletException, IOException { buch = katalog.getBuchInfo(isbn); warenkorb.setWarenkorbElement(buch.getIsbn(), buch); httpSession.setAttribute("warenkorb", warenkorb); request.setAttribute("buch", buch); request.setAttribute("katalogBuecher", katalog.getAlleBuecher()); forwardTo("/Katalog"); } private void nehmeBuchAusWarenkorbHeraus(String isbn) throws ServletException, IOException { buch = katalog.getBuchInfo(isbn); warenkorb.loescheWarenkorbElement(buch.getIsbn()); httpSession.setAttribute("warenkorb", warenkorb); request.setAttribute("warenkorbElemente", warenkorb .getWarenkorbElemente()); forwardTo("/Warenkorb"); } private void warenkorbAnzeigen() throws ServletException, IOException { httpSession.setAttribute("warenkorb", warenkorb); request.setAttribute("warenkorbElemente", warenkorb.getWarenkorbElemente()); forwardTo("/Warenkorb"); } private void forwardTo(String url) throws ServletException, IOException { requestDispatcher = context.getRequestDispatcher(url); requestDispatcher.forward(request, response); } /** * @param actionParameter * @return */ private ControllerAction getAction(String actionParameter) { ControllerAction action = ControllerAction.KATALOG_ANZEIGEN;; if (actionParameter != null) for (ControllerAction act : ControllerAction.values()) { if (act.getAction().equals(actionParameter)){ action = act; break; // action = ControllerAction.valueOf(actionParameter); } } return action; } }
der StackTrace verräht mir das im JSP zeile 20 der Fehler ist. Das Property welches nicht gefunden wird ist eine Methode aus der Java Klasse Warenkorb, was aber nicht sein kann da vorher alles funktionierte erst bei der umstellung von Java zu JSTL im JSP funktioniert es nicht mehr.
die Java Klasse Warenkorb spare ich mir vorerst da ich vermute das das Warenkorb Objekt nicht ordnugsgemäß übergeben wird. Aber ich weiß nicht was ich falsch mache
-
..es wäre schön, wenn uns der StackTrace auch was verraten würde!
-
Öm ja bei Web Anwendungen sprich JSP ist der auch so aussage kräftig

Der Stack Trace sagt es gibt die Methode nicht, aber sie ist Existent vor der JSTL Umstellung hat alles Funktioniert!
Browser StackTrace
Java Stack TraceCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property 'anzahlbuecher' not found on type model.Warenkorb org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) controler.Controller.forwardTo(Controller.java:174) controler.Controller.warenkorbAnzeigen(Controller.java:169) controler.Controller.doGet(Controller.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) root cause javax.el.PropertyNotFoundException: Property 'anzahlbuecher' not found on type model.Warenkorb javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:193) javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:170) javax.el.BeanELResolver.property(BeanELResolver.java:279) javax.el.BeanELResolver.getValue(BeanELResolver.java:60) javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) org.apache.el.parser.AstValue.getValue(AstValue.java:118) org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:935) org.apache.jsp.view.Warenkorb_jsp._jspx_meth_c_005fout_005f0(Warenkorb_jsp.java:260) org.apache.jsp.view.Warenkorb_jsp._jspService(Warenkorb_jsp.java:107) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) controler.Controller.forwardTo(Controller.java:174) controler.Controller.warenkorbAnzeigen(Controller.java:169) controler.Controller.doGet(Controller.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
javax.el.PropertyNotFoundException: Property 'anzahlbuecher' not found on type model.Warenkorb at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:193) at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:170) at javax.el.BeanELResolver.property(BeanELResolver.java:279) at javax.el.BeanELResolver.getValue(BeanELResolver.java:60) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) at org.apache.el.parser.AstValue.getValue(AstValue.java:118) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:935) at org.apache.jsp.view.Warenkorb_jsp._jspx_meth_c_005fout_005f0(Warenkorb_jsp.java:260) at org.apache.jsp.view.Warenkorb_jsp._jspService(Warenkorb_jsp.java:107) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) at controler.Controller.forwardTo(Controller.java:174) at controler.Controller.warenkorbAnzeigen(Controller.java:169) at controler.Controller.doGet(Controller.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:619) 08.04.2010 09:55:03 org.apache.catalina.core.StandardWrapperValve invoke SCHWERWIEGEND: Servlet.service() for servlet Controller threw exception javax.el.PropertyNotFoundException: Property 'anzahlbuecher' not found on type model.Warenkorb at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:193) at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:170) at javax.el.BeanELResolver.property(BeanELResolver.java:279) at javax.el.BeanELResolver.getValue(BeanELResolver.java:60) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) at org.apache.el.parser.AstValue.getValue(AstValue.java:118) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:935) at org.apache.jsp.view.Warenkorb_jsp._jspx_meth_c_005fout_005f0(Warenkorb_jsp.java:260) at org.apache.jsp.view.Warenkorb_jsp._jspService(Warenkorb_jsp.java:107) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) at controler.Controller.forwardTo(Controller.java:174) at controler.Controller.warenkorbAnzeigen(Controller.java:169) at controler.Controller.doGet(Controller.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:619)
-
Ich finde den StackTrace absolut aussagekräftig! Dort steht doch ganz genau, das es keine Methode getAnzahlbuecher() in der Klasse Warenkorb gibt!
Wenn der Rest funktioniert, kannst du ja auch sowas schreiben:
Code java:1 2
<em>Es befinden sich ${fn:length(warenkorb.warenkorbelemente)} Elemente im Warenkorb.</em>
Dazu mußt du aber die JSTL Functions einbinden.
Grüße
Peter
-
Danke für deine Antwort

Was meinst du warum der Stack Trace meiner Meinug nach e ist? Genau, weil er mir sagt das eine Methode die Existiert nicht da ist
Eine Methode die nicht da sein soll, aber bereits genutzt wurde! Sie Existiert und sie gibt mit ein Integer zurück, der einfach nur ausgegeben werden soll.
Warum sollte ich also so
] den wert ermitteln? Der sowieso nicht der Wahrheit entsprechen kann. Denn in jedem Element steckt die Anzahl wie oft das Element im Warenkorb liegt.
Im warenkorb liegt nur ein Generisches Element welches sich aus einem Element und der Anzahl gleicher Elemente besteht. Daher halte ich mir ja gerade hinter der Methode getAnzahlBuecher() die Summe aller Elemente
-
...dann poste doch mal die ganze Klasse Warenkorb. So wird das hier doch nur ein Rästelraten.
-
Nö
der Fehler liegt eindeutig im Warenkorb JSP!
Ich habe ein gesamtes Projekt Funktionstüchtig, nur halt jsp mit Java Code.
Zur Umstellung von JSP mit Java Code zu JSP ohne Java Code habe ich ein neues Projekt angelegt und sämtlichen Code aus dem alten Projekt übernommen.
Meine Fehler suche habe ich soweit abgeschlossen, ich weiß wo der Fehler ist! Nur kapiere ich nicht warum der Fehler auftritt!
Das Warenkorb Objekt kommt über das Bean im JSP an, kann mit java zugriff auch verwendet werden! Nur die Übergabe an JSP klappt nicht, so das es mit ${warenkorb."Methode"} nicht verwendet werden kann. <%= warenkorb."Methode"%> hingegen funktioniert wunderbar.
Und da mir nun anscheinend nichts Übrig bleibt werde ich wenn ich mit dem warenkorb arbeite weiter in meiner jsp file bei java bleiben
-
Meinetwegen, wenn die Klasse so ein Geheimnis ist! Aber es liegt garantiert nicht an der JSTL! Was mit Scriptlets funktioniert, geht auch mit JSTL, nur wesentlich wartbarer! Übrigens schreibst du in deinem einem Post was von der Methode getAnzahlBuecher(), lt. StackTrace rufst du aber getAnzahlbuecher() auf, IMHO sind in 99% der Fälle Schreibfehler das Problem.
Grüße
Peter
-
Ähnliche Themen
-
RectF property nicht zugreifbar
Von SpongeStone im Forum .NET Windows FormsAntworten: 6Letzter Beitrag: 04.02.09, 22:26 -
MVC Konzept Frage - JSTL Tags funktionieren nicht in Facelets/MyFaces
Von alan79 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 15.05.08, 23:23 -
[JSF] JSTL Tags werden nicht interpretiert
Von Basti54 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 26Letzter Beitrag: 24.10.05, 18:16 -
[JSF] Zugriff auf JSTL Werte mit nicht-<c: Tags
Von Basti54 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 6Letzter Beitrag: 20.06.05, 10:55 -
Property will nicht im Property-Fenster erscheinen
Von yesso im Forum .NET ArchivAntworten: 2Letzter Beitrag: 29.03.05, 19:14





Zitieren
Login





