11. marts 2003 - 11:27Der er
24 kommentarer og 1 løsning
Link, men helst uden "?id=1" i URL
Scenarie: Side 1 indeholder en række ID's som bliver vist på en liste. Alle ID's bliver hentet ud af en database og vist via en for-løkke.
Problem: ID's skal sendes videre til en anden side. Hvordan kan dette gøres uden at benytte sig af fx "side1.jsp?id=<%= id %>" som URL? Mit bedste bud bliver at alle linksne skal udformes som knapper, men det er ikke den mest optimale løsning da det ser forkert ud på den opsætning vi har valgt. Men det er vel den eneste mulighed når man vil prøve at tage en variabel, og gemme som en parameter af en slags som en anden side skal benytte sig af. Det skal vel sendes igennem som en form.
- kort sagt: du tilføjer id'et for den linie, du klikker på linket ud for, til det skjulte formfelt, som så bliver submittet til den ny side - derefter kan du på den nye side requeste fra den submittede form og du har dit id.
Jo, kan som sagt sende den via en form, enten via et hidden field eller en knap. Det benytter jeg mig af en række steder, men her kan en irriterende bruger jo faktisk selv lave et form-response og sende over til serveren og få et svar tilbage som den måske ikke skulle have lov til. Dette kunne undgåes hvis kun serveren selv kunne bestemme hvad variablen skulle være.
Sessions variablen vil jo give mening, så skal jeg vel bare sørge for at fjerne attributten igen ovre på den anden side. Men hvordan får jeg gemt variablen i sessionsobjektet? Jeg ved jo ikke hvilket ID jeg skal sende over på side2.jsp, så ID't skal varieres fra gang til gang.
nuno> Well, så skulle spørgeren jo nok ha' oprettet det under JavaScript kategorien! -det ville være det samme som hvis jeg begyndte at besvare spm's i PHP kategorien med ASP svar!!
luctatic> problemet kan løses med det simple javascript (JSP eller ej!), som jeg skrev.
På den måde får du kun det ene id posted til din side2.jsp vha. det skjulte formfelt - og du kan nemt requeste fra det nævnte formfelt på side2.jsp.
Hvis du gør som medions foreslår - så har du lige så mange skjulte formfelter som du har gennemløb i dit loop - alle med enslydende felt-navn - nemlig "id"
fx vil 5 formfelter kunne være:
<input type="hidden" name="id" value="<%= id %>"> <input type="hidden" name="id" value="<%= id %>"> <input type="hidden" name="id" value="<%= id %>"> <input type="hidden" name="id" value="<%= id %>"> <input type="hidden" name="id" value="<%= id %>">
og hvis id er hhv. 1, 2, 3, 4, 5 - så vil din request.getParameter("id") på side2.jsp give en streng der ser således ud 12345
fsconsult.dk> Hmm det forstod jeg vidst ikke helt...
-Du er nødt til at stoppe dine dataer i et hiddenfield hvis du vil overfører det... -Session metoden er ikke helt så smart, da den vil ligge globalt på serveren i 20 min.
medions> det er ikke helt korrekt - for hvis nu spørgeren ikke var KLAR over at problemet kunne løses vha. JavaScript - så kunne han jo ikke stille spørgsmålet i den kategori - men derfor skal han vel ikke snydes for at blive gjort opmærksom på at muligheden findes???
Og din pendant holder ikke - for et JSP problem udelukker ikke brug af JavaScript - men det gør PHP problem med en løsning i ASP - og omvendt.
medions, sessionsvariablen kan du selv fjerne igen fra serveren via session.removeAttribute(), men jeg kan ikke se hvordan det er muligt at hælde en ny attribut ind i sessionsvariablen. En attribut du i øvrigt kun kan hente fra html siden. Det SKAL næsten gøres via en form af en slags uanset om det er fornuftigt eller ej.
Og Numo, skal jeg bare lægge en form et eller andet sted (i bunden FX) med alle info, og så skulle javascriptmetoden selv klare ærterne?
Trist men det lader til at være det bedste bud so far.
medions> det var mere eller mindre det jeg forsøgte at skrive :-) det valgte id skal overføres på en eller anden måde, som f.eks. kan være vha et hidden field. jeg kan ikke umiddelbart se hvordan session vil hjælpe dig, da oplysningen stadig skal overføres fra browseren før man kan gemme det i sessionen (men måske overser jeg noget?)
Medions, jeg tror ikke jeg kan bruge session.setAttribute() af den simple årsag, at jeg ikke kan få fat i variablen. Variablen bliver jo hentet via jspkode sammen med en masse andre, men jeg skal først lægge en bestemt variablen over i sessionsobjektet når man trykker på linket, og det kan jo ikke lade sig gøre eftersom JSP allerede HAR fortolket html dokumentet på det tidspunkt.
i head på din side: <head> <script type="text/javascript"> function submitWithParam(inValue) { document.forms[0].idfelt.value = inValue; document.forms[0].submit(); } </script> </head>
Btw Nuno - kan ikke smide <script> ind i min <head> da den står i en anden fil og bliver brugt via <%@include %> på alle sider for at sikre ensartethed. Og hvis jeg bare smider <script> ind i selve <body> får jeg en fejl når jeg trykker på linket.
Ser sådan ud: <form method="post" action="info.jsp"> <input type="hidden" name="ID" value=""> </form> <script type="text/javascript"> function submitWithParam(inValue) { document.forms[0].ID.value = inValue; document.forms[0].submit(); } </script>
Og nede i JSP koden: out.write("<a href=\"java script:void(submitWithParam('"+ID+"'))'\">"+model+"</a>");
Når jeg vælger linket skriver den fint "java script:void(submitWithParam(110))" som link, men som sagt kommer der en fejl, unclosed String Litteral, når jeg trykker på linket.
du KAN også smide javascript functionen ind i <head> (i den fil hvor det nu er) istedet. Men hvis du ikke vil ændre i den - så er ovenstående en mulighed.
Fair nok. Ikke den pæneste løsning, men den virker.
Synes godt om
Ny brugerNybegynder
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.