Avatar billede kkaen Nybegynder
26. april 2010 - 13:26 Der er 9 kommentarer og
1 løsning

Tilgå Session fra Declaration

Jeg har oprettet en java.util.list hvori jeg har puttet data. Det virker fint, da jeg også kan trække data derudfra igen.

Men nu har jeg lavet en declaration i min kode, hvori jeg skal trække noget bestemt data ud fra listen, hvis nogle bestemte kriterier i listen er opfyldt. Her opstår problemet.
Jeg har tidligere fået declarationen til at virke uden brug af listen. Jeg har både angivet listen som global variabel inde på siden, samt gemt den i sessionen. Når jeg prøver at tilgå sessionen inde i declarationen, så fortæller compileren:

cannot find symbol
symbol  : variable request

Er der ikke tilgang til request inde i en declaration?
Jeg har prøvet at komme om ved det problem inde i declarationen, ved:

%><%list=(java.util.List<String[]>)request.getSession().getAttribute("list");%><%

men da det sker inde midt i en try-catch, så skriver compileren pludselig "catch without try". Der kommer desuden en masse compiler-fejl, såsom: "illegal start of expression
  private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();"

og

"illegal start of expression
  private static java.util.Vector _jspx_dependants;"

Skyldes dette, at man ikke har tilgang til sessionen inde i en declaration? I så fald, hvordan kan det løses? Man kan vel trække sessionen ud lige før kaldet til denne declaration, og så sende sessions-objektet med ind som argument, men det ser da ikke så kønt ud. Er jeg på rette vej, eller findes der andre smarte løsninger?
Avatar billede arne_v Ekspert
26. april 2010 - 15:29 #1
Du kan bruge request og session i <% %> men ikke i <%! %>.

Hvis du definerer nogle metoder i  <%! %> saa skal request/session sendes med over som argument.
Avatar billede kkaen Nybegynder
26. april 2010 - 16:49 #2
Ja, jeg tænkte det nok. Jeg gik ud fra, at <%! %> skal kende alle variabler ved compile-time. Jeg fandt også lidt dokumentation senere, som kunne tyde på det.

Men så skal vi bruge et "svar" igen ;-)
Avatar billede arne_v Ekspert
26. april 2010 - 16:52 #3
svar
Avatar billede arne_v Ekspert
26. april 2010 - 17:26 #4
Eksempel paa kald:

<%@ page import="java.io.*" %>
<%!
public void m(HttpServletRequest request, JspWriter out) throws IOException {
    out.println(request.getParameter("k") + "<br>");
}
%>
<%
out.println(request.getParameter("k") + "<br>");
m(request, out);
%>
Avatar billede arne_v Ekspert
26. april 2010 - 18:03 #5
Men ofte vil man flytte den slags ud i separate klasser.
Avatar billede kkaen Nybegynder
27. april 2010 - 08:00 #6
#4:
Så man kan godt benytte request i en metode, men man kan ikke benytte sessionen inde i requesten?
Avatar billede arne_v Ekspert
27. april 2010 - 14:58 #7
Jo, hvis du sender den med over som argument !
Avatar billede arne_v Ekspert
27. april 2010 - 14:59 #8
Hvis du bruger Tomcat kan jeg anbefale dig at proeve at finde den .java fil som Tomcat genererer fra din .jsp fil - den ligger i temp traet.

Saa vil en masse ting omkring hvad der kan bruges hvor og hvorfor vaere meget mere klart.
Avatar billede kkaen Nybegynder
27. april 2010 - 15:31 #9
Nååå, den bliver sendt med i "HttpServletRequest request" ?
Ja, jeg havde jo forstillet mig, at man skulle oprette en instans, lægge indholdet af sessionen deri, og så sende instansen til metoden som argument. Men det her ser da noget mere elegant ud :-)

Jeg bruger desværre ikke TomCat. Jeg bruger GlassFish V3.
Avatar billede arne_v Ekspert
13. juni 2010 - 04:30 #10
Så mangler du bare at acceptere svaret.
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