Avatar billede goldenboy Nybegynder
27. december 2001 - 12:28 Der er 12 kommentarer og
1 løsning

Simpelt: undgå evig oprettelse af klasse

Dette er sikkert så simpelt at jeg ikke brude spørge:
Jeg har nogle problemer med at få flere nyheder til at være i en container...det var som om at der altid kun var den nyeste nyhed i min container...og efter lidt test, kan jeg også se at size på min klasses arraylist altid er 1. Selvom jeg kalder metoden add() som burde tilføje en nyhed til containere. Og klasserne virker uden for min jsp side.

grunden til at jeg tror jeg hr kaget i det er, at jeg opretter en instans af klassen container i min body...men opretter den så ikke en ny en hver gang? og derved overskriver den gamle?

Hvis der er nogen som ved havd jeg snakker om og som kan hjælpe mig, ville jeg blive glad.
Avatar billede erikjacobsen Ekspert
27. december 2001 - 12:33 #1
Du kan jo altid vise os lidt kode
Avatar billede kasseper Nybegynder
27. december 2001 - 12:33 #2
kode kode kode, må vi se lidt kode ?
Avatar billede goldenboy Nybegynder
27. december 2001 - 12:37 #3
Sorry :-)
men jeg advarer...det er NEWBIE!

<html>

<head>
<title> Dark Swarms Officielle Hjemmeside </title>
<% java.util.GregorianCalendar date = new java.util.GregorianCalendar();%>
<% darkswarm.Newscontainer container = new darkswarm.Newscontainer(); %>
<%@ page import=\"darkswarm.News\" import=\"darkswarm.Newscontainer\"%>

</head>

<body bgcolor = #FFFFFF >

    <!-- Dette Array skal indeholde alle DS medlemmer -->
<%
    String[] helt = new String[3];
    helt[0] = \"Goldenboy[DS]\";
    helt[1] = \"Kilrogg[DS]\";
    helt[2] = \"Mr_Doom.[DS]\";
%>   

<%!int count=0;%>
<b><center> Dagens mand i skysovs er <%=helt[count%3]%> </center></b>
<br>
<center> Siden har været genindlæst <%=count%> gange </center>
<%count++;%>


<br>

<form method=\"front.jsp\">
    <textarea name=\"tekst\" rows=\"10\" cols=\"30\">
    </textarea> <br>
    <input type=\"submit\" value=\"Opret Nyheden\">
    <input type=\"reset\" value=\"Slet alt\">
</form>

<%
    if ( request.getParameterValues(\"tekst\")!=null )
    container.add(12,34,11,8,2001, ( (String)request.getParameterValues(\"tekst\")[0] ) );
    out.print(\"testing\" + ( (String)request.getParameterValues(\"tekst\")[0] ).length() );
%>


<br>
<%=container.news.size()%>
<%
    for(int i = 0; i < container.news.size();i++)
    {
        News n = (News)container.news.get(i);
        out.print( n.time() + n.getNews() );
        out.print( \"<br>\" );
    }
%>
<br>
Avatar billede logical Nybegynder
27. december 2001 - 12:39 #4
I stedet for at oprette en hver gang, f.eks.

<% MyContainer container = new MyContainer(); %>

Kan du gøre en af to ting.

<%! MyContainer container = new MyContainer(); %>

Så bliver der oprettet en instans, første gang siden kaldes, og den bibevares indtil din server lukkes ned. Den siges at have application scope.

Alternativt (Hvis du har en no-arg constructor)

<jsp:useBean id=\"container\" class=\"MyContainer\" scope=\"session\" />

Hvor der så er en container pr. bruger session. Andre mulige scopes er request, page og application.
Avatar billede goldenboy Nybegynder
27. december 2001 - 12:44 #5
TAK TAK TAK TAK TAK!!!

jeg fandt fejlen...du havde ret...jeg vidst ikke det med at indsætte et \'!\' ville løse mine problemer...kom med et svar og du får dine pts!!

TAK TAK TAK :-)
Avatar billede erikjacobsen Ekspert
27. december 2001 - 12:49 #6
Så overlever dine nyheder indtil næste gang din maskine bliver genstartet.
Og så forsvinder de.

Og har du to brugere, der gør noget samtidig med din \"globale\" variabel, får
du måske problemer.
Avatar billede goldenboy Nybegynder
27. december 2001 - 12:53 #7
ja, men min plan er at jeg vil gemme nyhederne i en txt fil på serveren. Og jeg kan ærligt taget ikke se hvordan det skulle give problemer...da jeg er \"lidt\" ligeglad med rækkefølgen af mine nyheder? de bliver stadig tilføjet?

Men nu har jeg et nyt problem :-)
hvis jeg refresher siden så tilføjer den den gamle nyhed...dvs hvis jeg trykker F5, bliver den sidste nyhed tilføjet igen.
jeg tror det er fordi :
    if ( request.getParameterValues(\"tekst\")!=null )
er sand...og derfor tilføjer den nyheden igen....hvordan flusher jeg request?
Avatar billede logical Nybegynder
27. december 2001 - 12:55 #8
Erik har selvfølgelig ret. Der kan blive problemer med samtidighed ved applicationscope, men hvis det ikke generer dig foreløbig, så vent til problemerne opstår (Så kan det være, at du har lært så meget, så du vil gøre det anderledes alligevel).
Avatar billede erikjacobsen Ekspert
27. december 2001 - 12:58 #9
Hvis du skriver

<form action=\"front.jsp\" method=\"post\">

bliver du advaret om det. Ellers er løsningen at lave en redirect af siden umiddelbart
efter opdateringen af din container.
Avatar billede goldenboy Nybegynder
27. december 2001 - 13:30 #10
Jeg må ærligt sige at jeg ikke forstår hvad du mener med at lave redirect?

Nå nu jeg har al funktionaliteten på den samme side, hvad er så ideen med at sende brugeren videre til en anden side..

jaja..jeg ved det...jeg er en idiot til selv simpel html....men vi skal jo alle starte et sted :-)
Avatar billede erikjacobsen Ekspert
27. december 2001 - 13:33 #11
Nej, sende ham videre til samme side. Det har den ønskede virkning
Avatar billede goldenboy Nybegynder
27. december 2001 - 13:37 #12
hmm....ville du ikke lige hjælpe mig med at lave en skridt for skridt analyse af det så?

Først loader han siden.
da requestobjectet er null, sker der ingen opdatering.
så indtaster han informationerne og vælger submit.
ved submit loades siden igen, denne gang er der bare noget i Request objectet.
containere opdateres.
ved at redirecte til samme side, tømmes request objectet så?
Avatar billede goldenboy Nybegynder
27. december 2001 - 13:38 #13
ps, hvodden redirecter man?
et lille kodeeksempel? :-)
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