Avatar billede luctatic Nybegynder
26. februar 2003 - 11:16 Der er 27 kommentarer og
1 løsning

Attempt to clear a buffer that's already been flushed

Subject kommer frem når jeg forwarder. Jeg har først en form med method=post til en jsp-side der så tjekker indholdet af formen, og så forwarder til enten den rigtige side, eller en fejl side alt efter om indholdet er formen kan godkendes (at der fx ikke står tal i et årstalsfelt).

Jeg benytter samme strategi under login-processen men der kommer der ingen problemer. Hvor er det præcists den prøver at flushe bufferen, er det når jeg forwarder så problemet ligger på den side jeg forwarder til, eller ligger det på kontrol-siden?
Avatar billede di8leva Nybegynder
26. februar 2003 - 11:27 #1
måske kan man få se nogle rader kod? =)
Avatar billede mfalck Praktikant
26. februar 2003 - 11:34 #2
hvor stor er din side ? jeg har haft problemer med at når siden er større end bufferen så har jeg fået et problem - det kan klares ved at sætte buffer størrelsen op på siden.
Avatar billede europe Nybegynder
26. februar 2003 - 11:38 #3
Det samme problem har jeg haft - har gjort det at jeg istedet for at forward bruger en form som jeg efter følgende sende via javascritp

<form name="test" action="enellerandenside.jsp"></form>
<script>document.test.submit();</script>
Avatar billede luctatic Nybegynder
26. februar 2003 - 11:40 #4
ja da.

Først undersøges indholdet af formen. Den del går fint, for jeg kan se hvilken af de to forwards der bliver kaldt. Selve de to forwards foregår i en if-sætning der enten sender til korrekt side, den anden til en error-side.

if(budtjek)
{
control.byd(bilID, (String)session.getAttribute("email"), bud);
%>  <jsp:forward page="Bilinfo.jsp">
    <jsp:param name="bil_ID" value="<%= bilID %>"/>
    <jsp:param name="pris" value="<%= pris %>"/>
    </jsp:forward>



Har også prøvet at sende info videre ved at lægge parametrene ind i selve linket:
<jsp:forward page="Bilinfo.jsp?bil_ID=<%= bilID %>&pris=<%= bud %>"/>

men igen, samme problem med bufferen.



Det kan sikkert have noget at gøre med, at man ser Bilinfo.jsp, indtaster noget på den form som så kalder Tjek.jsp, der hvis info er korrekt sender brugeren tilbage til Bilinfo.jsp. Kan den muligvis ikke li' at man sender tilbage til den side man lige kom fra? Det burde det vel bare ikke, da Tjek.jsp afvikles udelukkende på server-siden, og Bilinfo.jsp afvikles størstedelen på klientsiden  i hvert fald hvad formen angår.

<%
}
else
{
    request.setAttribute("Error", error);
    request.setAttribute("Origin", new String("Billiste.jsp"));
    %><jsp:forward page="Error.jsp"/>"<%
}
%>
Avatar billede luctatic Nybegynder
26. februar 2003 - 11:42 #5
Gik hvis lige noget galt i sidste besked hvor if-else blev brudt op i to dele. I får den lige i sin fulde længde.

if(budtjek)
{
control.byd(bilID, (String)session.getAttribute("email"), bud);
%>  <jsp:forward page="Bilinfo.jsp">
    <jsp:param name="bil_ID" value="<%= bilID %>"/>
    <jsp:param name="bud" value="<%= bud %>"/>
    </jsp:forward>

<%
}
else
{
    request.setAttribute("Error", error);
    request.setAttribute("Origin", new String("Billiste.jsp"));
    %><jsp:forward page="Error.jsp"/>"<%
}
%>
Avatar billede di8leva Nybegynder
26. februar 2003 - 11:48 #6
jag tror alrig jag fått en <jsp:forward....> till at virke som jag vill:
mitt tips er att bruge response.sendRedirect() istedet =)
Avatar billede luctatic Nybegynder
26. februar 2003 - 12:05 #7
Ja, men hvis jeg benytter mig af response.sendRedirect("Bilinfo.jsp"); så kan jeg vel ikke også benytte mig af request.setAttribute("bil_ID",bilID);??
Avatar billede di8leva Nybegynder
26. februar 2003 - 12:32 #8
response.sendRedirect("Bilinfo.jsp&bil_ID=" + bilId);

skal virke
Avatar billede di8leva Nybegynder
26. februar 2003 - 12:32 #9
oops, FEJL
skall vare

response.sendRedirect("Bilinfo.jsp?bil_ID=" + bilId);

skal virke
Avatar billede di8leva Nybegynder
26. februar 2003 - 12:33 #10
og, hvis du vill sende flere parametrar:

response.sendRedirect("Bilinfo.jsp?bil_ID=" + bilId + "&param2=" + param2 + "&param3=" + param3);
Avatar billede luctatic Nybegynder
26. februar 2003 - 12:51 #11
Ja, det kan jeg sagtens, men nogen ting vil jo ikke være fornuftige at gemme i selve URL'en hvis man FX skal have gemt password eller lignende. Brugte jo som nævnt <jsp:forward page="Bilinfo.jsp?bil_ID=<%= bilID %>&pris=<%= bud %>"/> tidligere.
Avatar billede di8leva Nybegynder
26. februar 2003 - 13:07 #12
du har ret, men SKAL du sende passwords mellen sider?
hvis så kan du gemme dem i request.getSession.setAttribute("password", "mypass");

og hente dem først i den nye siden....
Avatar billede luctatic Nybegynder
26. februar 2003 - 13:10 #13
Det gør jeg skam også, men hvis der nu var nogle variabler der skulle sendes fra den ene side til den anden, og ikke kunne vises i linket så alle kunne se dem bliver man jo nød til at benytte request.setAttribute(). Eller benytte session, og så slette objektet igen når man var færdig med det.

Men ved jsp:forward sender man jo request-objekterne med - kan det ikke gøres i response.sendRedirect()?
Avatar billede luctatic Nybegynder
26. februar 2003 - 14:36 #14
Hmmm, det kan man åbenbart ikke - hvilket desværre ikke bringer mig meget tættere på mit mål.
Avatar billede europe Nybegynder
26. februar 2003 - 15:13 #15
Hvis du bruger den fremgangsmåde - som ikke er køn men effiktiv - så bliver parameterne postede og derfor kommer de ikke med i url'en..

<form name="test" action="enellerandenside.jsp" method="post" >
<input type="hidden" name="bil_ID" value="<%= bilID %>"/>
<input type="hidden" name="bud" value="<%= bud %>"/>
</form>
<script>document.test.submit();</script>
Avatar billede luctatic Nybegynder
26. februar 2003 - 16:18 #16
Sandt, jeg kunne sende dem med via en form, men så er de igen synlige for klienten, denne gang ikke fra URL, men inde i selv source koden. Det kan da ikke passe at man ikke kan sende en simpelt String videre uden at klienten ser det hvis man benytter response.sendRedirect? Og hvis man ikke kan med response, hvilken anden metode kan man så sende videre på eftersom jeg stadig har problemer hvis jeg bruger <jsp:forward>?
Avatar billede jacobve Nybegynder
26. februar 2003 - 18:21 #17
Hvis du forwarder efter der er sendt noget html til klienten kommer den fejl du beskriver... det skyldes at den "flusher" bufferen hele tiden mm. du explicit beder den om at vente.

Derfor vil det være oplagt at bruge en servlet til at lave det tjek du i øjeblikket har din .jsp side til. Denne servlet kan så forwarde til den side du vil have.
Avatar billede jacobve Nybegynder
26. februar 2003 - 18:32 #18
en jsp side bør også kun bruges til at vise data og ikke bruges til at lave noget forretningslogik, som fx. din godkendelsesprocedure er.
Avatar billede luctatic Nybegynder
26. februar 2003 - 18:37 #19
Hmmm, jsp-siden bliver jo kompilet til en servlet anyway, og det eneste der er på Tjek.jsp er som sagt selve kontrollen og så en if-sætning hvor der forwardes. Så sandt, den kunne sagtens laves til en ren servlet. Men det vil vel ikke ændre på problemet at den kommer med fejlen? Og hvorfor kommer fejlen kun der, og ikke under login-proceduren?
Avatar billede jacobve Nybegynder
26. februar 2003 - 21:12 #20
kan du ikke prøve at poste hele indholdet af tjek.jsp?
Avatar billede luctatic Nybegynder
26. februar 2003 - 23:24 #21
Jo, kan gøre det når jeg møder imorgen, men ud over det lille snip sker der ikke meget i den. Men den kommer imorgen tidligt en gang.
Avatar billede luctatic Nybegynder
27. februar 2003 - 09:53 #22
Først kommer det forslag med at bruge response.sendRedirect() hvor der ikke er fejl, men til gengæld kommer der heller ikke nogen informationer ind i request-objektet og derfor kan jeg ikke danne den nye side da den bygger på de info.

<%@include file="TjekSession.jsp"%>

<%@ page import="bilServer.JSP_Control" %>
<%
JSP_Control control = new JSP_Control();
boolean budtjek = true;
String error = new String();
int bilID = Integer.parseInt(request.getParameter("bilID"));
int mindstebud = Integer.parseInt(request.getParameter("mindstebud"));
long bud = 0;
try
{
    bud = Long.parseLong(request.getParameter("bud"));
    if(mindstebud > bud)
    {
        budtjek=false;
        error = "Budet er for lille. Mindste bud på bilen er "+mindstebud+",-.";
    }
}
catch (Exception e)
{
error = "Fejl i bud - indtast kun tal";
budtjek = false;
}

if(budtjek)
{
    control.byd(bilID, (String)session.getAttribute("email"), bud);
    request.setAttribute("bil_ID",new String(""+bilID));
    request.setAttribute("pris",new String(""+bud));
    response.sendRedirect("Bilinfo.jsp");
}
else
{
    request.setAttribute("Error", error);
    request.setAttribute("Origin", new String("Billiste.jsp"));
    response.sendRedirect("Error.jsp");

}
%>



Så kommer den oprindelige side med jsp:forward. Her viser jeg kun if sætningen, da resten er den samme:

if(budtjek)
{
    control.byd(bilID, (String)session.getAttribute("email"), bud);
    request.setAttribute("bil_ID",new String(""+bilID));
    request.setAttribute("pris",new String(""+bud));
    %><jsp:forward page="Bilinfo.jsp"/><%
}
else
{
    request.setAttribute("Error", error);
    request.setAttribute("Origin", new String("Billiste.jsp"));
    %><jsp:forward page="Error.jsp"/><%

}
Avatar billede luctatic Nybegynder
27. februar 2003 - 10:49 #23
Begynder at få fejlen flere steder.

java.io.IOException: Error: Attempt to clear a buffer that's already been flushed.

Kan bare ikke gøre så meget eftersom det er servletten selv der skriver "out.clear()", og jeg kan ikke helt se hvor den linie kommer fra. :/
Avatar billede jacobve Nybegynder
27. februar 2003 - 18:11 #24
din jsp:forward vil altid clearer bufferen hvis der er indhold i denne, inden den forwarder... det gøres så den side der forwardes til, står for alt output. (hvilket også er det du er interesseret i).
Problemet er at der et sted inden din <jsp:forward> er sendt html til klienten.

Jeg kan forestille mig at dette kan løses ved at sætte siden til at paste følgende ind helt i toppen af din Tjek.jsp side.

<%@ buffer="200"%>
<%@ autoflush="true"%>

Hermed buffer du op til 200kb indhold til klienten og autoflusher hvis de 200kb nåes.

Men dette er ikke en pæn måde at gøre det på. Du burde overveje en sevlet løsning.
Avatar billede jacobve Nybegynder
27. februar 2003 - 18:13 #25
sorry der manglede et page og så kan de godt skrives i samme linie:

<%@ page buffer="200" autoflush="true"%>
Avatar billede luctatic Nybegynder
27. februar 2003 - 20:19 #26
Jeg har fået det ordnet ved simpelthen ikke at benytte forwards på den samme måde, for det er slet ikke noget html kode før jsp:forward som det var det; kun ren JSP. Men du får pointene for din tid.
Avatar billede jacobve Nybegynder
27. februar 2003 - 21:47 #27
hvad har du gjort i stedet for at bruge forwards?
Avatar billede luctatic Nybegynder
27. februar 2003 - 23:17 #28
bruger response hvor jeg ikke har brug for parametre, og ellers gemmer jeg det i en hidden form. På den præcise tjek.jsp side, bliver jeg stadig nød til at bruge forward, men der blev rettet i den include i toppen så den ikke arbejdede på samme måde når den tjekkede om der allerede var et sessions-ID.
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