Avatar billede bearhugx Nybegynder
31. oktober 2001 - 15:35 Der er 7 kommentarer og
2 løsninger

Inkludering af JSP kode via et TAG :: HASTER!

g\'dag Eksperter

Jeg har noget JSP-kode (scriptlets) i en database.
I øjeblikket har jeg en metode, som linie for linie out\'er JSP-koden fra databasen ud på en JSP side.

Nu er mit problem bare, at JSP-koden ikke bliver evalueret (Parset som JSP) - den bliver bare skrevet ud på siden.

Jeg har så hørt at man kan få et TAG til at evaluere indholdet af et tag igen - Kan man få den til at evaluere JSP kode (eller få den til at sige til servlet-containeren at denne \'nyindsatte stump kode\' skal evalueres igen som JSP...

-----
På jsp-siden ønsker jeg at det skal se sådanne ud

<doc:vis />

I session-context er der så et Dokument objekt, som (udover titel osv) indeholder html/JSP -kode.

f.eks.
dokument.getIndhold() --> \"<hr> <% out.println(\\\"Hejsa\\\"); %> <hr>\" osv.

Outputtet på siden, efter koden er evalueret skulle så være
\"<hr> Hejsa <hr>\"

i stedet, som jeg får det,
\"<hr> <% out.println(\"Hejsa\"); %> <hr>\"

Håber, i forstår mit spørgsmål ;-)

/Søren Munk Skrøder
Avatar billede bearhugx Nybegynder
31. oktober 2001 - 15:37 #1
<doc:vis /> peger så på et tag, som hedder VisDokumentTag ---

I øjeblikket se det tag sådanne ud :
-------------------------------------------------------
package tags.visning;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class VisDokumentTag extends BodyTagSupport
{
    public int doStartTag() throws JspException
    {
        try
        {
            pageContext.getOut().println(\" <% out.println(\\\"Hejsa\\\"); %>\");
        } catch( java.io.IOException ioEx )
        {
            throw new JspException( ioEx.getMessage() );
        }
        return SKIP_BODY;   
    }   
   
    public int doAfterTag() throws JspException
    {
        return EVAL_BODY_TAG;
    }
}
------
TLD\'en ser sådanne ud

    <tag>
        <name>vis</name>
        <tagclass>tags.visning.VisDokumentTag</tagclass>
        <bodycontent>JSP</bodycontent>
    </tag>
Avatar billede bearhugx Nybegynder
31. oktober 2001 - 15:37 #2
Hvad laver jeg forkert :-????
Avatar billede disky Nybegynder
31. oktober 2001 - 16:06 #3
jeg synes din ide med at hava jsp siden i databasen er forkert

men prøv at gemme data fra basen som fil, og inkluder den i din jsp side, ligesom man ville gøre med f.eks. header og footer i en webside.


Avatar billede disky Nybegynder
31. oktober 2001 - 16:10 #4
jeg tror ikke du lige umiddelbart kan få den til at køre en jsp side som laver data der skal parses som jsp på andre måder.

Jeg har ihvertefalde ikke set det gjort før.

Hmm, nu når jeg tænker over det er jeg faktisk i tvivl om ovenstående vil virke, en jsp side blvier jo kompilet til en servlet (det er dit problem) det vil sige at alt skal være til stede under denne kompiling.

Men det her virker:

1. din jsp side henter data fra basen, og gemmer det som en fil f.eks, \'temp.jsp\'
2. nu response.sendRedirect(\"test.jsp\"); Det gør så at din lige oprettet side bliver kompilet og vist.
3. du er nu på test.jsp og arbejder videre. Du kan så have inkluderet standard header og footer til at styre navigering osv.

Jeg tror faktisk det er det eneste du kan gøre.
Avatar billede bearhugx Nybegynder
31. oktober 2001 - 16:13 #5
Disky -->
Det handler om, at der er nogle artikler i databasen, hvori der også skal indgå nogle scriptlets...
Databasen holder styr på de sprog, som er tilgængelige - og hvis man vælger et anden sprog, så skal den tekst, som omkranser disse scriptlets også ændres...

Så i stedet for at lave en fil, hver gang en bruger vil læse en artikel for så at inkludere den med f.eks. include-direktivet - ønsker jeg at den henter det fra databasen - på samme facon som en artikel ,som ikke har Scriptlets i sig...

/Søren

Du kan kigge på www.fant.dk/ib65/index.jsp -
Avatar billede bearhugx Nybegynder
31. oktober 2001 - 16:19 #6
Jeg har også prøvet at lave følgende konstruktion

<doc:eval>
  <doc:vis />
</doc:eval>

Hvis eval\'s bodycontent er sat til JSP skulle den fortokle indemaden som JSP....

men der fucker det også op :-/ ....

koden til Eval-taget :
package tags.visning;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class EvalTag extends BodyTagSupport
{
    public int doStartTag() throws JspException
    {
        try
        {
            pageContext.getOut().println(\"--EVAL START--\");
        } catch( java.io.IOException ioEx )
        {
            throw new JspException( ioEx.getMessage() );
        }
   
   
        return EVAL_BODY_TAG;   
    }   
   
    public int doAfterTag() throws JspException
    {
        try
        {
            pageContext.getOut().println(\"--EVAL SLUT--\");
            getBodyContent().writeOut( getPreviousOut() );
        } catch( java.io.IOException ioEx )
        {
            throw new JspException( ioEx.getMessage() );
        }

   
        return EVAL_BODY_TAG;
    }
}


I TLD\'en er bodycontent for EvalTag sat til JSP - så skulle den bedømme indholdet inden i  ( <doc:vis /> ) som JSP ...

prob. er bare, at den evaluerer det INDEN doc:vis er kørt
.... :-/

Måske skulle man bare i doStartTag bede den om at skippe - for senere i doAfterTag bede den om at reevaluere BODY ....
Kan man mon det :-?


/Søren - Ny til Jsp-tags ....
Avatar billede disky Nybegynder
31. oktober 2001 - 19:42 #7
den med valg af sprog har jeg løst på en anden måde.

Jeg har en standard side, og ud fra hvad brugeren har valgt af sprog, bliver der indsat tekster i de korrekt sprog ud fra enten en database eller fra en properties fil.

Fungere glimrende :)


Jeg tror dit problem med det fortolkning er at du forsøger at importere noget jsp i en side der er blevet kompilet fra jsp til en servlet. Og det går ikke, måske kan din servlet/jsp engine sættes op til det.

Jeg tror du bliver nød til at redesigne din ide :( (sorry)
Avatar billede disky Nybegynder
04. november 2001 - 15:55 #8
Hvordan går det med problemmet ?
Avatar billede bearhugx Nybegynder
11. november 2001 - 23:07 #9
Jeg kæmper for at få det færdigt til på Onsdag -- Du får 50 bananer for dit svar omkring at det ikke kan inkluderes... - resten tager jeg tilbage....

Evt vil jeg vende tilbage til efter den 14. (Aflevering af hovedopgave på Datamatiker-studiet) med nogle andre spørgsmål :-))))
(ellers skal jeg måske bare slappe af :)

/Stress-Søren
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