Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 10:31 Der er 18 kommentarer og
1 løsning

Updatering af Iframes

Hej Eksperter,

Jeg har en servlet som returnerer noget HTML. Jeg har de to Iframes som jeg bruger til at indeholde min navigationsmenu og den anden til indeholdet. Mit spørgsmål er om det er en måde at undgå at loade menuen hver gang man trykker på en knap i den. Kan man med andre ord lave det så menuen bare bliver stående, mens indholdet ændre sig?

out.println("<table border='0'>");
            out.println("<tr><td width='30%'>");
            out.println("</td><td width='70%'>");
            out.println("<iframe src ='Menu' ALLOWTRANSPARENCY=\"true\" frameborder='0' scrolling='no' align='top' width='490' height='30'>");
            out.println("</iframe>");
           
            out.println("</td></tr>");
            out.println("<tr><td colspan='2'>");
            out.println("<iframe src ='Startdata' ALLOWTRANSPARENCY=\"true\" frameborder='0' width='700' height='250'>");
            out.println("</iframe>");
            out.println("</td></tr></table>");
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 10:33 #1
knapperne i menuen ser således ud

<input type='button' class='button' name='news' value='News' onmouseover=\"this.className = 'buttonHover';\" onmouseout=\"this.className = 'button';\">
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 10:40 #2
Jeg forestiller mig et eller andet med Onclick. Jeg har navngivet de to Iframes. Den første hedder menu og den anden content.
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 10:49 #3
Kan man gøre noget i denne her retning?

Onclick="parent.content.location.href=\"nytindhold\"
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 11:00 #4
Onclick=\"document.all(\"content\").src=\"nytindhold\"\"
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 11:01 #5
out.println("<td><input type='button' class='button' name='news' value='News' onmouseover=\"this.className = 'buttonHover';\" onmouseout=\"this.className = 'button';\" Onclick=\"document.all(\"content\").src=\"nytindhold\"\"></td>");
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 11:08 #6
out.println("<td><input type='button' class='button' name='news' value='News' onmouseover=\"this.className = 'buttonHover';\" onmouseout=\"this.className = 'button';\" onclick=\"document.all('content').src='nytindhold'\"></td>");

Jeg får en scriptfejl som siger at dokument.all enten er null eller ikke et objekt
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 11:19 #7
Når jeg får menuen tilbage fra servleten ser den således ud

<html><head>
<link rel='stylesheet' type='text/css' href='../style/styles.css'>
<style>
body { background:transparent;margin:0000;}
</style>
</head>
<body>
<table border='0' cellpadding='0' cellspacing='0'><tr>
<td><input type='button' class='button' name='news' value='News' onmouseover="this.className = 'buttonHover';" onmouseout="this.className = 'button';" onclick="document.all('content').src='Startdata'"></td>
<td><input type='button' class='button' name='' value='' onmouseover="this.className = 'buttonHover';" onmouseout="this.className = 'button';"></td>
<td><input type='button' class='button' name='Credit' value='Credit' onmouseover="this.className = 'buttonHover';" onmouseout="this.className = 'button';"></td>
<td><input type='button' class='button' name='Contact' value='Contact'  onmouseover="this.className = 'buttonHover';" onmouseout="this.className = 'button';"></td>
<td><input type='button' class='button' name='Guestbook' value='Guestbook' onmouseover="this.className = 'buttonHover';" onmouseout="this.className = 'button';"></td>
</tr></table>
</body>
</html>
Avatar billede nikolajdu Nybegynder
06. januar 2003 - 12:12 #8
onclick="document.all['content'].location.href='nytindhold.html'"
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 12:17 #9
Jeg er bange for at det heller ikke virker :-(
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 12:18 #10
den pågældende IFrame ligger ikke på den samme side. Kan det være det som er galt?
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 12:25 #11
klassen som danner menuen ser således ud

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class Menu extends HttpServlet
{
       
        public void doGet (HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
        {
        PrintWriter        out;
       
        response.setContentType("text/html");

        out = response.getWriter();
       
              out.println("<html><head>");
            out.println("<link rel='stylesheet' type='text/css' href='../style/styles.css'>");
            out.println("<style>");
            out.println("body { background:transparent;margin:0000;}");
            out.println("</style>");
            out.println("</head>");
            out.println("<body>");
            out.println("<table border='0' cellpadding='0' cellspacing='0'><tr>");
            out.println("<td><input type='button' class='button' name='news' value='News' onmouseover=\"this.className = 'buttonHover';\" onmouseout=\"this.className = 'button';\" onclick=\"document.all['content'].location.href='Startdata'\"></td>");
            out.println("<td><input type='button' class='button' name='the Mrtls' value='the Mrtls' onmouseover=\"this.className = 'buttonHover';\" onmouseout=\"this.className = 'button';\"></td>");
            out.println("<td><input type='button' class='button' name='Credit' value='Credit' onmouseover=\"this.className = 'buttonHover';\" onmouseout=\"this.className = 'button';\"></td>");
            out.println("<td><input type='button' class='button' name='Contact' value='Contact'  onmouseover=\"this.className = 'buttonHover';\" onmouseout=\"this.className = 'button';\"></td>");
            out.println("<td><input type='button' class='button' name='Guestbook' value='Guestbook' onmouseover=\"this.className = 'buttonHover';\" onmouseout=\"this.className = 'button';\"></td>");
            out.println("</tr></table>");
            out.println("</body>");
            out.println("</html>");
            out.close();
        }
       
}

Grunden til at jeg har lavet det sådan er fordi jeg regner med at bygge en database på senere.
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 12:30 #12
Det her en siden som indeholder Iframes

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class Start extends HttpServlet
{
       
        public void doGet (HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
        {
        PrintWriter        out;
       
        response.setContentType("text/html");

        out = response.getWriter();
       
       
           
            out.println("<html><head><title>Start</title>");
            out.println("<link rel='stylesheet' type='text/css' href='../style/styles.css'>");
            out.println("</head>");
            out.println("<body>");
            out.println("<div class='margin1'>");
           
            out.println("<table border='0'>");
            out.println("<tr><td width='30%'>");
            out.println("</td><td width='70%'>");
            out.println("<iframe name='menu' src ='Menu' ALLOWTRANSPARENCY=\"true\" frameborder='0' scrolling='no' align='top' width='490' height='30'>");
            out.println("</iframe>");
           
            out.println("</td></tr>");
            out.println("<tr><td colspan='2'>");
            out.println("<iframe name='content' src ='Startdata' ALLOWTRANSPARENCY=\"true\" frameborder='0' width='700' height='250'>");
            out.println("</iframe>");
            out.println("</td></tr></table>");
           
            out.println("</div>");
            out.println("</body>");
            out.println("</html>");
            out.close();
            }       
       
}
Avatar billede mikmakmuk Nybegynder
06. januar 2003 - 12:31 #13
Jeg gør åbenbart et eller andet helt forkert :-(  (Har jeg misforstået hvordan Iframes kan bruges??)
Avatar billede smirnoff Nybegynder
06. januar 2003 - 19:54 #14
Du skal ikke bruge document.all med mindre du KUN laver til IE (og dog også Opera)..du kan gøre dette på knappen:


onclick="parent.frames['content'].location.href='dinside.html'"

..dette åbner "dinside.html" i framen content på parent ... altså den side hvori dine frames er defineret
Avatar billede olebole Juniormester
06. januar 2003 - 20:41 #15
<ole>

mikmakmuk >> Til din kommentar (06/01-2003 12:18:29): Ja, der har du problemet, men lad os se en URL, så vi kan hjælpe dig uden at skulle lege Lykkehjulet  ;o)

En anden ting er din måde at skrive koden ud på f.eks:
  PrintWriter        out;
  response.setContentType("text/html");
  out = response.getWriter();

... bla bla bla bla bla bla bla ...

  out.println("</div>");
  out.println("</body>");
  out.println("</html>");
  out.close();

Nu er jeg ikke stiv i Java, men i andre sprog er det en meget dårligt performende måde at gøre det på.
I stedet for at skrive hver linie ud, bør du samle de enkelte linier i én streng og skrive den ud til sidst. Det går voldsomt meget hurtigere.

Du kan også lave et array og fylde 'stumperne' ind som elementer i dette. Til sidst join'er du array'et om en newline og udskriver den resulterende streng.
I JavaScript er denne metode som oftest op til flere hundrede gange hurtigere end streng-metoden - som igen er tilsvarende hurtigere end at udskrive de enkelte linier, hver for sig.
Se, dét kan man kalde performance-forbedring  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
06. januar 2003 - 20:45 #16
Ups ... jeg kan se, smirnoff løste problemet med adresseringen ... det overså jeg - men prøv at optimere din kode på den måde, jeg anviste. Det vil gøre dit program væsentlig hurtigere  ;o)
/mvh
Avatar billede smirnoff Nybegynder
07. januar 2003 - 01:41 #17
Olebole har helt ret mht performance...

En helt tredie ting kunne være at benytte en StringBuffer
Så vidt jeg husker :

StringBuffer buffer = new StringBuffer();
buffer.append("<html><head><title>Start</title>");
...
out.println(buffer.toString());
Avatar billede olebole Juniormester
07. januar 2003 - 02:00 #18
Mmmmmmm ....... med hjælp fra smirnoff behøver man ikke være stiv i Java - eller nohoget andet schprrog ...... dset kjhommer hhhelt af schig schhelv ... *hik*!  *-\
Avatar billede smirnoff Nybegynder
07. januar 2003 - 10:24 #19
hehe - nemlig derfor har jeg det handle... :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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