Avatar billede jetrit Nybegynder
03. oktober 2003 - 10:08 Der er 6 kommentarer og
1 løsning

JSP cuscontag løkke

hej der jeg sidder og skal nu lave en løkke der løber over billederne i en mappe, men de eksembler jeg har fundet kan jeg ikke få til at virke så jeg ville gerne have et eksempel som jeg kan arbejde vidre med

jsp
<%@ taglib uri="/WEB-INF/jsp/hgtags.tld" prefix="hgt"%>
<hgt:login/>
<hgt:validerlogin/>
<%@include file="top.jsp"%>
<h1>Vælg den baggrund du skal bruge</h1>
    <table class="box">
      <tr>
      <hgt:hbg>     
      <td>
      hej<img scr="<%=sti%>">image</img>
      </td>
      </hgt:hbg>
      </tr>
    </table>
<%@include file="bund.jsp"%>


TLD
...
<tag>
  <name>hbg</name>
  <tag-class>tag2.Iterator</tag-class>
  <tei-class>tag2.IteratorTEI</tei-class>
  <body-content>JSP</body-content>
  <description>løber over alle bileder</description>
  <attribute>
  <name>sti</name>
  <required>false</required>
  </attribute>
</tag>
...

TAG class

package tag2;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class Iterator extends BodyTagSupport{
  File[] filer;
  int current =0;

  public int doAfterBody() throws JspException {
    if (filer.length > current) {
      current++;
      pageContext.setAttribute("sti", filer[current].toString());
      return (EVAL_BODY_AGAIN);
    }
    try{
      bodyContent.writeOut(bodyContent.getEnclosingWriter());
      return SKIP_BODY;
    }catch (IOException e){throw new JspTagException(e.toString());}
  }

  public int doStartTag() throws JspException {
    return (EVAL_BODY_AGAIN);
  }

  public void doInitBody() throws JspException{
    File dir = new File("C:\\");
    filer = dir.listFiles();
  }
}

TEI

package tag2;

import javax.servlet.jsp.tagext.*;

public class IteratorTEI extends TagExtraInfo{
  public VariableInfo[] getVariableInfo(TagData data){
    VariableInfo info1 = new VariableInfo(data.getAttributeString("sti"),
        "String", true, VariableInfo.NESTED);
    VariableInfo [] info = {info1};
    return info;
  }
}

Jeg må blank indrømme at jeg ikke har det fulde overblik over det, men den kommer op med følgene fejl når jeg køre den?
hvad kan jeg gøre for at få den til at virke? skal den bare skrottes?

lige nu kommer den med følgene fejl

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:478)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:190)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
    at java.lang.Thread.run(Thread.java:484)


root cause

java.lang.NullPointerException
    at java.util.Hashtable.get(Hashtable.java:320)
    at org.apache.jasper.compiler.ScriptingVariabler$ScriptingVariableVisitor.setScriptingVars(ScriptingVariabler.java:147)
    at org.apache.jasper.compiler.ScriptingVariabler$ScriptingVariableVisitor.visit(ScriptingVariabler.java:111)
    at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:707)
    at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:1028)
    at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:1070)
    at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:1076)
    at org.apache.jasper.compiler.Node$Root.accept(Node.java:232)
    at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:1028)
    at org.apache.jasper.compiler.ScriptingVariabler.set(ScriptingVariabler.java:181)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:239)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:369)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:473)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:190)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
    at java.lang.Thread.run(Thread.java:484)



--------------------------------------------------------------------------------

Apache Tomcat/4.1.27
Avatar billede jetrit Nybegynder
03. oktober 2003 - 10:10 #1
Og ja det er custom tag jeg mener
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 10:41 #2
Du skal formentlig blot (jeg har ikke læst det hele) bruge getAttribute for
at få din sti i kroppen af din customtag
Avatar billede jetrit Nybegynder
03. oktober 2003 - 10:58 #3
hvor i klassen??
Avatar billede erikjacobsen Ekspert
03. oktober 2003 - 11:09 #4
Her ;)
  hej<img scr="<%=sti%>">image</img>
Avatar billede soelvpil Nybegynder
03. oktober 2003 - 16:01 #5
Jeg tror det skyldes en fejl i din TEI-klasse

Prøv med

public class IteratorTEI extends TagExtraInfo{
  public VariableInfo[] getVariableInfo(TagData data){
    VariableInfo info1 = new VariableInfo("sti",
        "String", true, VariableInfo.NESTED);
    VariableInfo [] info = {info1};
    return info;
  }
}
Avatar billede jetrit Nybegynder
03. oktober 2003 - 18:52 #6
der var også andre fejl, men det var kun almene fejl.

tak for hjælpen

jetrit
Avatar billede jetrit Nybegynder
06. oktober 2003 - 08:24 #7
Løsning:
jsp:
    <%@ taglib uri="/WEB-INF/jsp/hgtags.tld" prefix="hgt"%>
    <table class="box">
      <tr>
      <hgt:hbg>     
      <td>
      <a href="getinfo.jsp?img=<%=sti%>"> <img src="<%=sti%>" /> </a>
      </td>
      </hgt:hbg>
      </tr>
    </table>

TLD
<tag>
  <name>hbg</name>
  <tag-class>tag2.Iterator</tag-class>
  <tei-class>tag2.IteratorTEI</tei-class>
  <body-content>JSP</body-content>
  <description>løber over alle bileder</description>
  <attribute>
  <name>sti</name>
  <required>false</required>
  </attribute>
</tag>

JAVA TAG
  package tag2;


import java.io.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class Iterator extends BodyTagSupport{
  String[] filListe;
  int current =0;

  public int doAfterBody() throws JspException {
    if (filListe.length > current) {
      pageContext.setAttribute("sti", filListe[current].toString());
      current++;
      return (EVAL_BODY_AGAIN);
    }
    try{
      bodyContent.writeOut(bodyContent.getEnclosingWriter());
      return SKIP_BODY;
    }catch (IOException e){throw new JspTagException(e.toString());}
  }

  public int doStartTag() throws JspException {
    return (EVAL_BODY_AGAIN);
  }

  public void doInitBody() throws JspException{
    File dir = new File("C:\\Program Files\\Apache Group\\Tomcat 4.1\\webapps\\HgTags\\f");
    File[] filer = dir.listFiles();
    filListe = new String[filer.length];
    for(int i=0; filer.length > i; i++){
      String fil = filer[i].toString();
      filListe[i]= "f/" + fil.substring(fil.lastIndexOf("\\")+1, fil.length());
    }
  }
}

JAVA TEI
package tag2;

import javax.servlet.jsp.tagext.*;

public class IteratorTEI extends TagExtraInfo{
  public VariableInfo[] getVariableInfo(TagData data){
    VariableInfo info1 = new VariableInfo("sti",
        "String", true, VariableInfo.NESTED);
    VariableInfo [] info = {info1};
    return info;
  }
}
tak for hjælpen
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