Avatar billede luctatic Nybegynder
27. februar 2003 - 11:17 Der er 12 kommentarer og
2 løsninger

request.getAttributes giver nullPointerException

Der er tre jsp sider, side0, side1 og side2 (man begynder jo altid at tælle fra 0 som programmør :D ). På side0 skriver folk noget i en form som via method="POST" bliver sendt videre til side1.
I side1 bliver der sat en række parametre via request.setAttribute(), og der går en jsp:forward til side 2, der så side 2 benytter sig af en request.getAttribute() for at hente parametrene igen. Problem : nullPointerException i side2, den kan ikke finde de parametre jeg så nydeligt satte i side1. Nogen ideer til hvorfor det kan være?
Avatar billede luctatic Nybegynder
27. februar 2003 - 11:20 #1
Ups, undskyld, det er ikke en nullPointerException der kommer, det er java.lang.NumberFormatException: null, der kommer. Så attributten lader til at være tom på side2, hvilket jeg ved den ikke er i side1 når jeg sætter den. Hvis den var tom i side1, ville jeg jo få en fejl allerede når jeg benytter den derovre.
Avatar billede arne_v Ekspert
27. februar 2003 - 11:31 #2
Fra ServletRequest JavaDoc:

setAttribute

public void setAttribute(java.lang.String name,
                        java.lang.Object o)

Stores an attribute in this request. Attributes are reset between requests. This method is most often used in conjunction with RequestDispatcher.
Avatar billede arne_v Ekspert
27. februar 2003 - 11:33 #3
Gem i session i.s.f. !

request.getSession().setAttribute("navn", "værdi");
Avatar billede di8leva Nybegynder
27. februar 2003 - 11:34 #4
skall du ikke bruge

request.getSession().setAttribute()
Avatar billede arne_v Ekspert
27. februar 2003 - 11:34 #5
navn = request.getSession().getAttribute("navn");
Avatar billede arne_v Ekspert
27. februar 2003 - 11:37 #6
[off topic]

Iøvrigt er det kun C/C++/Java programmører der tæller fra 0.

Fortran programmører tæller fra 1.

Pascal programmører tæller fra hvad de har lyst til.

Etc.
Avatar billede luctatic Nybegynder
27. februar 2003 - 11:43 #7
request.getSession.setAttribute sætter den vist som en sessionsvariabel og ikke som bare en requestvariabel, og som Arne_v også skrev i starten, så fjernes attributen nemlig når requestet er færdigt hvilket også var fordelen da jeg kun skal bruge objektet en enkelt gang.
Problemet er bare, at objektet er tomt når det kommer frem. Det eksisterer jo, ellers ville der fremkomme en fejl hos brugerne når de så siden, men fejlen kommer kun i tomcats log.


Og sandt arne, havde glemt de gode glade dage med pascal og delphi hvor man bare talte som man havde lyst til. Det var ikke pænt men sjovt at lave et array fra 111-112, bare fordi man kunne :D
Avatar billede erikjacobsen Ekspert
27. februar 2003 - 11:55 #8
Hvis du ikke skal bruge den som Session variabel, er det overkill at
sætte den som sådan en.

Default er vist "Page"-scope, som er den JSP-side du er på. Næste trin
er "Request", som dækker alle de sider du kommer til i én forespørgsel,
fx med forward. Det lyder som om det er den du skal bruge.

Syntaksen ...  øh ... den har jeg ikke lige present.
Avatar billede erikjacobsen Ekspert
27. februar 2003 - 11:56 #9
Det jeg egentlig ville sige: Det burde virke. Har du noget kode vi kan
kigge nærmere på.
Avatar billede luctatic Nybegynder
27. februar 2003 - 12:02 #10
Hmmmm, sidder lige og nærlæser koden lidt - hvad er HELT præcist forskellen på getParameter og getAttribute bortset fra at den ene returnerer et objekt og den anden returnerer en string? Min tanke lige nu er, at getParameter henter sine informationer fra URL'en efter et '?' som fx side.jsp?id=2, hvorimod getAttribute henter sine info fra et request objekt. Hvis jeg har ret i det, så løser det vist muligvis, måske hvis jeg er heldig, problemet.
Avatar billede arne_v Ekspert
27. februar 2003 - 12:08 #11
Erik>

Som jeg læser spørgsmålet så skal der overføres data fra side0.jsp
som indeholder en form som POST'es til side1.jsp.

Det er 2 requests.

Hvis det kun var en forward fra side0.jsp til side1.jsp, så burde
request.setAttribute/request.getAttribute virke fint.
Avatar billede arne_v Ekspert
27. februar 2003 - 12:10 #12
lucatic>

request.getParameter() henter information sendt fra browser til server
(enten query string efter ? - eller form felter i POST).

request.getAttribute() henter information gemt på serveren for den pågældende
request.

request.getSession().getAttribute() henter information gemt på serveren for
den pågældende session(d.v.s. den gemmes mellem forskellige requests).
Avatar billede luctatic Nybegynder
27. februar 2003 - 12:13 #13
Ah - fy da føj da. Hvis jeg nu bare havde kendt den forskel noget tidligere. Irriterende at den skide bog ikke kunne forklare det. Den er 950 sider lang, og så springer den over en SÅ væsentlig forskel på de to metoder.
Avatar billede luctatic Nybegynder
27. februar 2003 - 12:18 #14
Kanon - der klarede jeg to problemer på samme tid. Videre til næste spændende dilemma. :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester