Toon posts:

[JSP] varabele vanuit JSP doorgeven naar Jscript *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo dan

Het volgende probleem doet zich bij mij voor. Ik heb een verschuivende tekstbalk op m'n website.
Deze is gemaakt in Jscript, nu is het mijn wens om de tekst die getoond wordt te halen uit een database, maar ik krijg dit niet voor elkaar.
De query die ik heb werkt in JSP, maar zodra ik deze in de plaats van de tekst zet wordt er niets meer getoond.

Is het misschine mogelijk om een variabele vanuit JSP aan te roepen vanuit Jscript, of is het verstandiger om een nieuwe query te maken die via Jscript de tekst uit de database haald.

En de onvermijdelijke vraag, hoe moet dat

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Je kan toch gewoon de text in het stukje JScript schrijven vanuit je jsp code?

[ Voor 8% gewijzigd door Gert op 31-03-2005 23:03 ]


Verwijderd

Topicstarter
ik hoop inderdaad dat dat kan, maar ik kan nergens vinden hoe dat moet

Verwijderd

Wat je moet doen is een javascript variable maken, daar een assignment aan doen en voor de righthand-side een scriptlet of JSTL code neerzetten.

Bedenkt wel dat, tenzij je zeker weet dat je assignment value slechts een nummer is of een enkele string zonder quotes of enters, je je value moet filteren. Je kunt hiervoor je eigen filter schrijven, maar je kunt ook de standaard URLEncoder/decoder hiervoor gebruiken.

bv met scriptlets:

code:
1
2
3
4
5
6
7
8
9
10
<script>
    function URLDecode(string){
        var exp = /\+/g;
        return unescape(String(string).replace(exp, " "));
    }
    var bla = URLDecode( '<% URLEncoder.encode( myobject.getMyText() ); %>' );

   // somewhere in your code
  myJavaScriptFunction( bla );
</script>


De server side encode zorgt ervoor dat er in je HTML source een lange string komt te zijn zonder enters en zonder quotes. De client side decode zorgt ervoor dat er in het geheugen de originele tekst staat, dus met eventuele enters en quotes.

(ik heb de code overigens niet getest, maar dit zou wel moeten werken)

Verwijderd

Topicstarter
bedankt,. ik ga het gelijk proberen

Helaas lukt het me niet
Misschien is het handig als ik de code laat zien, waarschijnlijk leg ik het probleem niet duidelijk uit.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<HTML>
    <HEAD>
        <TITLE> ONDER </TITLE>
    </HEAD>
    <BODY bgcolor="#6699cc">

        <marquee id="alertit" style="position:absolute;left:0px;top:10;background-color:A6C8E4" onMouseover="this.scrollAmount=0" onMouseout="this.scrollAmount=speed"></marquee>
        <script type="text/javascript">
            function URLDecode(string){
            var exp = 

            // query om variabele uit databse te halen
            <sql:query var="Onder" scope="session">
                SELECT WEBTEKST.TEKST
                FROM WEBTEKST
                WHERE WEBTEKST.LOCATIENR = 8;
            </sql:query>;
            return unescape(String(string).replace(exp, " "));
            }
            var bla = URLDecode( '<% URLEncoder.encode( myobject.getMyText() ); %>' );

           // de bewegende tekst waar de waarde in zou moeten komen
            var themsg='<span style="font:italic 26px Arial;color:red;"><b>myJavaScriptFunction( bla );
            </a></b></span>'

            var speed=3 //speed of scroller (1-10 or more)
            var loops=99 //specify number of times message scrolls across screen (an integer or "infinite")

            function populatescroller(){
            var windowwidth=iecompattest().clientWidth
            document.getElementById("alertit").innerHTML=themsg
            document.getElementById("alertit").style.width=windowwidth
            document.getElementById("alertit").scrollAmount=speed
            document.getElementById("alertit").scrollDelay=20
            document.getElementById("alertit").loop=loops
            document.getElementById("alertit").onfinish=function(){
            document.getElementById("alertit").style.visibility="hidden"
            }
            }

            function iecompattest(){
            return (document.compatMode!="BackCompat")? document.documentElement : document.body
            }

            if (document.all && document.getElementById){
            window.onload=populatescroller
            window.onresize=populatescroller
            }

        </script>
    </BODY>
</HTML>


Ik hoop dat jullie me kunnen helpen

[ Voor 98% gewijzigd door Verwijderd op 01-04-2005 17:37 ]


  • flowerp
  • Registratie: September 2003
  • Laatst online: 04-02 02:01
Dat gaat zo niet werken lieverd ;)

Ten eerste die var exp = moet je natuurlijk niet in de URLDecode functie zetten.

Ten tweede, de <sql:query> tag wordt server side uitgevoerd. Het resultaat van de query komt in een variable te staan, maar het geeft zelf geen output. De data moet je zelf nog daaruit halen. De server side variable die jij gebruikt (Onder) is van Type result. Daarvan moet je eerste alle rijen aflopen, en per rij de data van de column eruit halen (TEKST). De data concateneer je dan aan een string.

Deze hele string URLEncoder je dan, en ken je toe aan je javascript variable.

Bedenkt echter dat je met server side en client side zit. Feitelijk doe je aan code generatie. Je *genereert* client-side code (dat genereren doe je server side) en die wordt gedraaid client-side.

Het lijkt erop alsof jij echt totaal geen idee hebt wat je aan het doen bent. Je moet ook de myObject.getMytext() niet letterlijk overnemen joh! Dat was alleen als voorbeeld gegeven. Wat jij nu aan het doen bent lijkt meer op scriptjes verzamelen dan echt programmeren (nofi).

Toch nog even een klein voorbeeldje, maar ik zou eerste eens gewoon leren wat functies en objecten etc zijn. (voor alle duidelijkheid, de code hieronder zet je dus NA je <sql:query> en de URLDecode functie neem je gewoon over zoals gegeven. Probeer ook zelf te begrijpen wat je doet hoor! De mensen geven over het algemeen alleen richtlijnen en patronen aan voor oplossingen, geen kant & klare copy-paste scriptjes ;) )

code:
1
2
3
4
5
6
7
8
9
10
<% String content = ""; // stringbuffer is beter hier %>
<c:forEach var="row" begin="0" items="${Onder.rows}">
   <c:set var="tekst" value="${row.TEKST}"/>
   <jsp:useBean id="tekst" type="java.lang.String" />
   <%  content += tekst; %>
</c:forEach> 

<script>
   var bla = URLDecode( '<% URLEncoder.encode( content ); %>' );
</script>


Merk op dat het stuk tussen <% %> en <c:forEach> op de server runt en niet in je output (response) komt. <script> is geen server-side commando, dus dat komt letterlijk in je output (e.g. kun je zien als je in je browser show source doet).

Er komt dus iets in je gegenereerde client-side source als:

var bla = URLDecode ( 'Dit+is+een+la%21n%98ge+string+%23Die+uit+%89%67de+DB+Komt' );

Dit stukje code wordt dan weer door de client gerunt, en resulteerd in de gedecodeerde string die in de client-side var bla staat.

Ik hoop dat dit je weer wat verder helpt.

PS
Het is overgens veel makkelijker als je de query gewoon in een java bean doet, zodat je vanaf je JSP alleen 1 enkele get doet op die bean. De <sql:> tags zijn eigenlijk niet echt bedoeld voor deze dingen, maar alleen om wat snel te testen.

[ Voor 33% gewijzigd door flowerp op 01-04-2005 23:51 ]

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.

Pagina: 1