Avatar billede luctatic Nybegynder
11. marts 2003 - 11:27 Der 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.
Avatar billede casualty Nybegynder
11. marts 2003 - 11:30 #1
kan du ikke overføre det som inpu "hidden"...Med en form..?

Eller via. en session variabel?
Avatar billede medions Nybegynder
11. marts 2003 - 11:30 #2
Smæk det i en Session variabel...
Eller gør det vha. POST metoden!


//>Rune
Avatar billede casualty Nybegynder
11. marts 2003 - 11:31 #3
inpu=input
Avatar billede casualty Nybegynder
11. marts 2003 - 11:31 #4
Som medions også skriver
Avatar billede medions Nybegynder
11. marts 2003 - 11:33 #5
Hvis du fx. gør sådan her:

<form action="side1.jsp" method="post">
  <input type="hidden" name="id" value="<%= id %>">
</form>

Så på "side1.jsp" skriver du:

<%= request.getParameter("id") %>

//>Rune
Avatar billede nuno Nybegynder
11. marts 2003 - 11:35 #6
du kan lave et skjult formfelt - <input type="hidden" name="idfelt" value="">

og så et javascript, der aktiveres når du går videre til den næste side - fx:

<a href="java script:void(submitWithParam('<%=id%>'));"><%=id%> link</a>

og så i dit <head> funktionen

<script type="text/javascript">
  function submitWithParam(inValue) {
    document.forms[0].idfelt.value = inValue;
    document.forms[0].submit();
  }
</script>

- 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.

Bare husk at sætte method="post" i din form.

/nuno
Avatar billede medions Nybegynder
11. marts 2003 - 11:37 #7
nuno> Dette er IKKE en JavaScript kategori!! -JSP = JavaServer Pages, og ikke JavaScript!

//>Rune
Avatar billede nuno Nybegynder
11. marts 2003 - 11:37 #8
medions> hvis han har 20 linier i sit for loop vil han få 20 skjulte formfelter med samme name :)

og hans request vil give ham en lang streng med id'er fra alle felterne

/nuno
Avatar billede luctatic Nybegynder
11. marts 2003 - 11:37 #9
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.
Avatar billede fsconsult.dk Nybegynder
11. marts 2003 - 11:37 #10
medions> hvordan kan man vælge imellem x antal værdier vha. sessions variable eller POST metoden??

såvidt jeg kan se slipper man ikke uden om at have id'erne stående på en eller anden form i sin html-side.
Avatar billede nuno Nybegynder
11. marts 2003 - 11:38 #11
medions> jamen det ved jeg skam godt.

Men problemet kan LØSES vha. javascript

/nuno
Avatar billede medions Nybegynder
11. marts 2003 - 11:45 #12
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!!

//>Rune
Avatar billede nuno Nybegynder
11. marts 2003 - 11:47 #13
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

/nuno
Avatar billede medions Nybegynder
11. marts 2003 - 11:47 #14
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.

//>Rune
Avatar billede nuno Nybegynder
11. marts 2003 - 11:50 #15
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.

/nuno
Avatar billede medions Nybegynder
11. marts 2003 - 11:50 #16
luctatic> Sådan her laves Sessions i JSP...

<%
String SessionIndhold = "Hello World";
session.setAttribute("SessionNavn", SessionIndhold);

    String name = (String)session.getAttribute("SessionNavn");
    out.println(name);
%>

//>Rune
Avatar billede nuno Nybegynder
11. marts 2003 - 11:51 #17
"...for et JSP problem udelukker ikke NØDVENDIGVIS brug af JavaScript..."

skulle der nok have stået

nuno/
Avatar billede luctatic Nybegynder
11. marts 2003 - 11:53 #18
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.
Avatar billede fsconsult.dk Nybegynder
11. marts 2003 - 11:53 #19
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?)
Avatar billede luctatic Nybegynder
11. marts 2003 - 11:55 #20
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.
Avatar billede nuno Nybegynder
11. marts 2003 - 12:07 #21
luctatic> lidt á la det her:

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>

i body:
<body>
<form name="idcontainer" method="post" action="side2.jsp">
  <input type="hidden" name="idfelt" value="">
</form>

<% 'dit loop
for(variabel, betingelse, increment){
        out.println("<a href=""java script:void(submitWithParam('" + id + "'));"">" + id + " link</a><br>");
}

%>

</body>

du må nok lige selv justere JSP-koden - jeg har ikke nogen server jeg kan debugge på her.

/nuno
Avatar billede luctatic Nybegynder
11. marts 2003 - 12:11 #22
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.
Avatar billede nuno Nybegynder
11. marts 2003 - 12:21 #23
så kan du lave tildele værdien til formfeltet og lave submit på selve linket

out.println("<a href=""java script:document.forms[0].ID.value='" + id + "';document.forms[0].submit();"">" + model + "</a>");

du har en ' (enkelt-ping) efter de lukkende parenteser i javascriptet istedet for ; - derfor fik du en unclosed String Literal

/nuno
Avatar billede nuno Nybegynder
11. marts 2003 - 12:22 #24
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.

/nuno
Avatar billede luctatic Nybegynder
11. marts 2003 - 12:25 #25
Fair nok. Ikke den pæneste løsning, men den virker.
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