Avatar billede mik28 Seniormester
02. marts 2005 - 16:05 Der er 15 kommentarer og
1 løsning

Indsætte noget kode

Hej Eksperter,

Jeg sidder og prøver at få bare en lille smule styr på min kode. Sagen er den at jeg har kodet noget som engenligt virker okay. Jeg kan bare se at jeg snart mister overblikket over det og det kunne jeg godt tænke mig at komme lidt i forekøbet derfor vil jeg gerne have lagt dele ud i nogle klasser for sig selv.

Jeg har altså en JSP side som alt efter om nogle sessionvariable er sat skal vise nogle ting.

På JSP siden har jeg skrevet

<%=new Niveau1().visNiveau1() %>

Men jeg får en fejl der siger illigal start of expression
Avatar billede mik28 Seniormester
02. marts 2005 - 16:07 #1
Klassen Niveau1 ser således ud og jeg har også importeret pakken i toppen af min JSP side


package framework;

public class Niveau1
{
       
        public String visVisniveau1()
        {
       
        StringBuffer buffer = new StringBuffer();
        buffer.append("try {");
           
   
        buffer.append("Vector vi = new Vector();");
        buffer.append("vi.addElement((String)session.getAttribute(\"userid\")");
   
        buffer.append("ResultSet rs    = d.select(\"SELECT p.id, p.gruppenavn from produktgrupper p, users_produktgrupper_rel up where up.user_id = ? and up.produktgrupper_id = p.id\", vi);");
       
        buffer.append("%>");
        buffer.append("<div style=\"position:absolute;padding-top:0px;margin-top:75px;margin-left:0px;height:50px;width:200px;background-color:transparent;\">");
        buffer.append("<form name=\"produktgruppe\">");
        buffer.append("<select style=\"width:200px;\" onchange=\"document.produktgruppe.submit();\" name=\"produktgruppe_select\">");
        buffer.append("<option value=\"\">Vælg Produktgruppe");
        buffer.append("<option value=\"\">----------------</option><%");
        buffer.append("while(rs.next()) {");
        buffer.append("%>");
        buffer.append("<option value=\"<%= rs.getString(\"id\") %>\"<%=rs.getString(\"id\").equals(produktgruppe_select)?\" SELECTED\":\"\"%>><%= rs.getString(\"gruppenavn\") %></option>");
        buffer.append("<% session.setAttribute(\"produktgruppe_select_s\", produktgruppe_select);");
        buffer.append("  session.setAttribute(\"under_produktgruppe_select_s\", \"\");");
        buffer.append("  session.setAttribute(\"under_under_produktgruppe_select_s\", \"\");");
        buffer.append("}");
        buffer.append("%></select>");
        buffer.append("</form>");
        buffer.append("</div><%");   
        buffer.append("    } catch (SQLException s) {");
        buffer.append("System.out.println(\"<h3>SQL fejl: \" + s.toString() + \" \"");
        buffer.append("+ s.getErrorCode() + \" \" + s.getSQLState() + \"</h3>\");");
        buffer.append("}");       
   

        buffer.append("%>");
        buffer.append("<div style=\"position:absolute;padding-top:0px;margin-top:100px;margin-left:0px;height:50px;width:200px;background-color:transparent;\">");
        buffer.append("<button class=\"opretadmKnapper\" onclick=\"win=window.open('./oprethovedgruppe.jsp', 'OpretNyHovedgruppe', 'scrollbars=yes,resizable=no,copyhistory=yes,height=400,width=550,top=145,left=175,screenY=150,screenX=100');win.focus();win.reload(true);\">Opret/adm hovedgrupper</button>");
        buffer.append("</div>");
        buffer.append("<%");
           
   
    return buffer.toString();
    }   
       
       
}
Avatar billede mik28 Seniormester
02. marts 2005 - 16:08 #2
Det er meget muligt at det er helt hen i vejret det som jeg gør, men kan jeg så ikke få et bud på hvordan jeg skal gøre det :-)
Avatar billede arne_v Ekspert
02. marts 2005 - 16:09 #3
visNiveau1 != visVisniveau1
Avatar billede arne_v Ekspert
02. marts 2005 - 16:10 #4
<%=(new Niveau1()).visVisniveau1() %>

bør virke

(men jeg syne sikke at det er pænt)
Avatar billede mik28 Seniormester
02. marts 2005 - 16:11 #5
Hvordan vil du så foreslå at jeg gør det
Avatar billede mik28 Seniormester
02. marts 2005 - 16:12 #6
For du har ret i at det ikke er pænt
Avatar billede arne_v Ekspert
02. marts 2005 - 16:14 #7
Hov.

Jeg tror ikke at din <% %> kode inde i den streng vil blive kørt, så det virker
nok alligevel ikke.
Avatar billede arne_v Ekspert
02. marts 2005 - 16:15 #8
Jeg kan lige prøve at tænke om jeg kan få nogle gode ideer.
Avatar billede mik28 Seniormester
02. marts 2005 - 16:20 #9
Kan man ikke include en kodestump på en eller anden snedig måde. Det drejer sig om at jeg under nogle omstændigheder sætter nogle sessionvariable som jeg bruger til at teste hvad der skal vises. Problemet er bare at det efterhånden går hen og bliver lidt komplekst og koden på JSP siden bare vokser og vokser. Derfor ville det jo være fedt at få det delt lidt op
Avatar billede mik28 Seniormester
02. marts 2005 - 16:22 #10
Jeg tænker på noget ala

if (et eller andet er opfyldt){
include det her
}
Avatar billede mik28 Seniormester
02. marts 2005 - 16:31 #11
Jeg kan vise dig koden som den ser ud, så kan du helt sikkert se problemet. Jeg vil dog gerne have lov til at maile den til dig
Avatar billede arne_v Ekspert
02. marts 2005 - 17:49 #12
Mit forslag vil være at du:

1)  laver Java kode som returnerer en ArrayList/Vector af beans (i.s.f. et ResultSet)

2)  vise koden i JSP enten med embedded Java kode til løkken eller med brug af JSTL

3)  gemmer en bean i din session og bruger den med setProperty og eventuelt EL
Avatar billede mik28 Seniormester
02. marts 2005 - 18:38 #13
Det lydet spændende men, det er langt mere end jeg kan finde ud af
Avatar billede cayman Nybegynder
22. marts 2005 - 16:07 #14
Den fejl du beskriver nederst i din indledende tekst er fordi du ikke kan skrive "new ..." inde i det expressiontag.

men men..

Du må følge nogle regler for at få det delt op:
1. Alt html skal enten ligge i html, jsp eller taglibs. Ikke i javakoden. Så lav nogle include jsp-sider til de ting du skal bruge på flere sider.
2. Lagdeling.
2a) Datalaget(model): Du skal have splittet din databaseaccess væk fra din view-del, som Arne også skriver. Lav en klasse der accesser databasen, og returnerer en liste (eks ArrayList).
2b) Controllerlaget(controller): Det er også en god ide, at holde ansvarsfordelingen klar. JSP-siden viser ting. Den kontrollerer ikke. Så lav en controller istedet i form af en servlet, og videregiv ansvaret til jsp siden når du har udført din java del. (Hvis du har en emailadresse skal jeg gerne sende dig et eksempel på hvordan det kunne se ud)
2c) Viewlaget (view): JSP-siden er din view del. JSP-siden skal have mulighed for at kompilere sig selv lige inden den eksekveres. Det kan ikke når den først bliver dannet i runtime øjeblikket, sådan som du har lavet det.

Jeg mener ikke du kan indlejre javakode i jsp, som igen er indlejret i javakode. Det kan du måske i nogle scriptsprog, men java skal kompileres.

jeg har et standard - og meget enkelt - webprojekt, med servlets, jsp mv, som du kan benytte med din tomcat-server
Avatar billede mik28 Seniormester
22. marts 2005 - 16:30 #15
Jeg burde jo nok have lukket spørgsmålet. Jeg har løst det med

<%@ include file="../include/niveau1.jsp" %>
Avatar billede mik28 Seniormester
27. april 2005 - 17:47 #16
Jeg rydder lidt op :-)
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