Evaluating custom tag file

I have an attribute called Template with the following info:
<html>
<tr>
<td><tags:searchResults/></td>
</tr>
</html>
In my results.jsp I have the following:
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/fn.tld" prefix="fn" %>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="tags" %>
${Template}
When ${Template} gets evaluated it rendeers the html tags properly but never evaluates the <tags:/searchResults/> which is a tag file that just says "search results"
I'm using Tomcat 5.0.19
Any help would be appreciated.

Sorry, but you can't do that. A JSP must be aware of a custom tag at translate time, so you can't embed tag calls in an attribute or JSTL variable or in output from another tag.

Similar Messages

  • Multiple function signatures in JSP custom tag file

    I'm writing a jsp .tag file and I've encountered the following problem. I have those two functions :
    private void iterateThroughChildElements(Element element)
         for (Iterator i = question.getElements().iterator(); i.hasNext(); )
              this.parseAndDisplay( (Element) i.next() );
    private void parseAndDisplay(Question question)
    private void parseAndDisplay(Answer question)
    (......)Both Answer and Question objects are elements but I get an error from the compiler which says that no correct signature was found for the parseAndDisplay function.
    What could be the problem ? Do I have to cast the objects according to a instanceof comparaison ??

    There was an error in my code, it is as follows :
    private void iterateThroughChildElements(Set elements)
         for (Iterator i = elements.iterator(); i.hasNext(); )
              this.parseAndDisplay( (Element) i.next() );
    }

  • Which is better? Cusome Tag or Tag Files?

    Hi all,
    I have a novice knowledge of using and developing both the "Custom Tags Handlers" and "Custom Tag Files".
    I would like to know which one is better to facilitate many small database applications. Any issues with deployment (centrally or locally)?
    I appreciate your time and views.
    Thank you for reading.
    Regards.

    Custom tag handler:
    1. it depends on the java skills.What depends on the Java skills?
    2. Deployment can be done centrally.What is deployed and where is it deployed?
    3. Manual compilation required.What is compiled?
    Custom tag files:
    1. Easy for non-java programmersWhat is easy for non-Java programmers?
    2. Not clear about deployment issues. I mean whether they can be deployed centrally and can be reused over many applications. If yes, how? I am using netbeans for my web projects.What depolyment issues are you unclear about?
    3. no manual compilation required.What is compiled?

  • Class as an attribute name in JSP tag file

    I just ran into an issue where I was writing a custom tag to generate a specific set of HTML elements, and wanted to be able to use CSS the same way I had before refactoring it into a tag. So, I included 'class' as an attribute in the custom tag file and deployed.
    On Glassfish v3, this generated a bunch of JasperExceptions in the Javac compilation, complaining about <identifier> expected and reaching the end of file while parsing. I tracked it down, of course, to the use of 'class' as an attribute name, which was reduced to a servlet class defining:
    public String getClass() {
       return this.class;
    public void setClass(String class) {
       this.class = class;
    }I'm curious -- which part of the process messed up here? Is "class" a valid identifier under the Java EE spec, and the translation should have used something like setClass_(String class_)? Or is it invalid, and Netbeans didn't know to mark it as an error before it tried to deploy? (And, of course, that I missed that in the spec, making it my fault.) I couldn't find anything specifically saying that reserved words couldn't be used as JSTL identifiers, so my gut is that the parser messed up. Also, I found a bug report about it for an alternate web container, but no mention of it in the bug trackers for Glassfish, Tomcat or Jasper.
    Where's the blame?

    stdunbar wrote:
    I think that Netbeans messed up. getClass() is, of course, defined on Object and class is a Java keyword.What's to stop the compiler from recognizing that "class" would be a problem and mapping it to an alternate name behind the scenes?
    This is the only documentation I turned up. Maybe this says it's invalid:
    Java EE SpecThe unique name of the attribute being declared. A translation error results if more than one attribute directive appears in the same translation unit with the same name.A translation error results if the value of a name attribute of an attribute directive is equal to the value of the dynamic-attributes attribute of a tag directive or the value of a name-given attribute of a variable directive.

  • Confusing execution sequence in Custom tag

    I have a custom tag file with the name make_red.cfm that
    makes a text passed to it to the color red.
    The calling code looks like this:
    Main page<br>
    <cf_make_red result="myVar">
    Dont mess with the Zohan!!!
    </cf_make_red>
    back to the main page<br>
    The code in make_red.cfm looks something like this:
    <cfoutput>
    <hr>
    ThisTag.ExecutionMode is #ThisTag.ExecutionMode#<br>
    ThisTag.GeneratedContent is
    #ThisTag.GeneratedContent#<br>
    <hr>
    <cfif ThisTag.ExecutionMode IS "Start">
    Tag start<br>
    <cfif structkeyexists(attributes,"result")>
    <cfset evaluate("caller.#attributes.result# =
    ""CUSTOM_TAG_COMPLETED""")>
    </cfif>
    Tag processing<br>
    <cfelseif ThisTag.ExecutionMode IS "End">
    Tag processed<br>
    <cfset ThisTag.GeneratedContent = "<font
    color=""red"">"&ThisTag.GeneratedContent&"</font><br>">
    The tag ends here<br>
    </cfif>
    </cfoutput>
    The output looks like this:
    Main page
    ThisTag.ExecutionMode is start
    ThisTag.GeneratedContent is
    Tag start
    Tag processing
    Dont mess with the Zohan!!!
    ThisTag.ExecutionMode is end
    ThisTag.GeneratedContent is Dont mess with the Zohan!!!
    Tag processed
    The tag ends here
    back to main page
    My question is this:
    As per the sequence of the statements in the custom tag code,
    the text that appears in the beginning of tag file will be printed
    after which the processing for the end tag happens in the
    <cfif>. The text passed between the <cf_make_red> and
    </cf_make_red> i.e. "Dont mess with the Zohan!!!" appears to
    be printing before the end tag executes.
    Shouldnt the text passed between the <cf_make_red> and
    </cf_make_red> come after the end tag is processed? Because
    thats where i am making the text red.
    Could someone please explain this?

    Doing a little more experimentation, I discovered that pageContext is null in the constructor, but not null in the otherDoStartTagOperations() method (called by the doStartTag() method of the tag's class... it's something Forte forces you to do).
    Is this normal? I was under the impression that pageContext is supposed to be defined EVERYWHERE in any class that extends BodyTagSupport... including the class' own constructor.
    On a related topic, is there documentation somewhere as to what, exactly, Forte is doing behind the scenes when it's managing a taglib (how it keeps track of them, where it puts config files, how the entries it makes in them are different or extended from the normal layout, etc.)? At the moment, I suspect that half of the grief I'm having with writing taglibs is caused by Forte itself forcing me to do things in a roundabout way that bears little resemblance to the ways shown in different books on the topic (and in fact all but ensures that nearly every published example will fail and require major rewriting because of the way it forces tag classes to be structured), but I don't see any easy way to let Forte handle compiling the classes and testing them with its embedded Tomcat, but do the config file housekeeping myself I can be in control of it.

  • Cannot find CFML template for custom tag SELECTDATE

    Hi,
    I am not a ColdFusion developer and just moved a site from one server to another. That site is developed by someone else not me and I just moved the site to ColdFusion server. Site is working fine except a few pages where I am getting this error:
    Cannot find CFML template for custom tag SELECTDATE
    I read a little bit about custom tags. These are files that needs to be placed in a certain folder from where ColdFusion reads them.
    So that means I will need to ask the developer who developed this site to provide me with this custom tag file, which when I will place in appropriate folder, this page will start working? And without that file I cannot do anything about it?
    Thanks

    As Dan says, they're just CFM files.  Usually one can identify them as follows:
    * they're in the same directory as a file calling <cf_somefilename[...]>, wherein there is a somefilename.cfm is the name of the file
    * they're in one of the directories set as custom tag directories (in CFAdmin, or Application.cfc)
    * they have references to "thistag" or the attributes scope in them (although the latter can produce false positives on Fusebox sites)
    By the sounds of it, your issue is - like I said before - you haven't got your custom tag dirs set up in CFAdmin (or in Application.cfc, which I didn't mention before).  Investigate that.
    Adam

  • Search strategy for JSP tag files

    Hello everyone,
    I've been trying to find a solution to this for some time, but couldn't find a clean one. Maybe somewhere here has any ideas for a solution...
    Consider a JSP taglib which is composed of hundreds of .tag files. The library is referenced in JSP using the "*tagdir*" option of the taglib directive, which simply points to /WEB-INF/tags/ (where the .tag files are located).
    Our standard server software distribution includes that tag library, as well as JSP pages that make up the server's web user interface. Those JSP pages use the taglib extensively.
    Now, we want to be able to distribute upgrades to the JSP pages and the tablib, but allow customers to easily customize some tag files without worring about loosing their changes if they apply a future upgrade.
    If it were possible for JSP pages to declare two overlapping taglib directives (same prefix) pointing to two different tagdirs, it would allow us to place our hundreds of .tag files in one "standard" directory, and allow customers to place customized .tag files in another "customized" directory. That way JSP files would always use the same prefix for our tags, but the actual .tag file inserted would be coming either from the customers's "customized" tagdir or from our "standard" tagdir (depending if they chose to override a tag with a customized version or not).
    Is this possible? How do people deal with taglib customization and maintenance issues?
    Thank you!

    Thanks for the reply!
    We use the ClickOnce smart client deployment to the user's machine and we would not want to touch/change anything on the user's machine. So, we can't rely on an environment variable being set.
    It almost seems that the DB Support Team has to not only talk to the Tech Support team and arrange for deploying the right version of the tnsnames.ora file on their users machines, but also talk to the App Deployment Team and provide the most recent version of this file to be used for deployment. So I guess if this file is checked in a code repository, the DB Support team can notify the Tech Support Team and the App Deployment Team to refresh respectively all user machines and application deployment configuration files.
    Alternatively, as one of the app deployment instructions of App Deployment team can be: "check out the most recent version of tnsnames.ora from the repository before deploying the application".
    Any thoughts?
    Thanks.
    Regards,
    gkk1969

  • Custom Tag not evaluating expression in attribute

    I have a custom tag that needs to take dynamic values in the attributes, but I can't seem to get the values "interpreted" correctly. I have the <rtexprvalue> tag set to "true" in my .tld file, which I thought was the only thing that was needed in order to accomplish what I am trying to do. However, that does not seem to be the case.
    I am using WebLogic (8.1.4) and their <netui> tags, along with JSTL tags (1.0).
    An example of what my code looks like is the following:
    <test:myTag id="1" idx="<netui:content value='{container.index}' />">
        <netui:select ... />
    </test:myTag>and
    <c:set var="myIdx" value="<netui:content value='{container.index}' />" />
    <test:myTag id="1" idx="<c:out value='${myIdx}' />">
        <netui:select ... />
    </test:myTag>Neither of the above approaches has worked. In my code for my Tag.java file, I get the literal string values of <netui:content value='{container.index}' /> and <c:out value='${myIdx}' />, respectively, in my idx property.
    Can someone give me any hints as to what I may be doing wrong?
    Thanks.

    Shouldnt that be
    <netui:content value='${container.index}' />Actually, weblogic does not use the '$' prefix before
    their expressions. Fine. Which in turn means weblogic has some custom expression evaluator.
    Note weblogic 8.1
    as a container doesnt implicitly supportexpressions
    and you have to build in that feature into yourtag
    library.Are you referring to the 'isELIgnored' attribute when
    you mentioned the above statement? If not, can you
    explain what you meant by "build that feature into
    your tag library"?
    It's like this - expression language is supported by default in all containers that implement the j2ee 1.4 spec (servlet 2.4/jsp 2.0). Additionally you should also declare your web application to adhere to the 2.4 standards (through the schema definition in web.xml). In applications that refer to the 2.3 dtd but are run on a 2.4 compliant container you can set the 'isELIgnored' attribute to false and use EL. This works because your container anyways supports it.
    If your container doesnt provide support for EL (outside the jstl tags) as is the case with weblogic 8.1, then you can still use expressions by using something like the [url http://jakarta.apache.org/commons/el/]apache common evaluator  package. The difference being that you will have to call the evaluator classes to evaluate the attribute.
    Are there any alternatives that I could use to
    accomplish what I am trying to do?Did the above answer your question?
    ram.

  • How to use JSP custom tag lib in PAR file?

    Hi All,
    I am trying to customize mastheaderpar file. For that I have downloaded relevant par file and making the changes accordingly.
    As part of the changes I would require to use JSP custom tag library in my par file.
    I have the TLD file and relevant classes in the jar file. I would like to know where and what kind of modifications have to be done to use the jsp custom tag library.
    I tried modifying some things in portalapp.xml but was not successful.
    Please help me on how to proceed with this? It would be great if you can provide the xml entry to use this tag library
    Thanks
    Santhosh

    Hi Johny,
    Thanks for the reply. Actually I am able to change colors etc. with out any problem.
    My requirement is to use XMLTaglib in mastheader par file. This tag lib is from apache tomcat. I have the relevant TLD and class files. I copied TLD file into taglib dir of portal-inf and class file in src api.
    And I have added the following line in portalapp.xml under component-profile section of default
    <property name="tlxtag" value="/SERVICE/Newmastheader/taglib/taglibs-xtags.tld">
    Is this the right way to use tag lib? Actually before adding this line I used to get the error saying "Error parsing taglib", but now the error does not occur and I am getting new error. This is an exception in one of the taglib classes.
    Could any one provide me some inputs on how to check this error?
    Thanks
    Santhosh

  • Custom tags & re-creating jar file

    Question from a novice!
    How, when I have made changes to a custom tag library tld file, do I get the deployment JAR file to re-zip the new files? The ones in that I have in the JAR file are out of date compared with the new files that I have edited after creating the tag library.
    Thanks

    Yes, you would need to either re-deploy to a JAR file to re-create the JAR file containing the new Tag Library.
    Rob

  • Custom tag lib, tomcat server cant parse descripter file

    Hi there, I'm working on custom tag libraries, and I have created a simple tag which prints a string when it is called from a jsp file. And I have created a descriptor file for that perticular tag and also created a jsp file which is using the tab lib that I have created, I have placed all these files in their corresponding files, well the problem is when I'm trying to call that jsp file it says the server can't parse the tags.tld file, because <urn></urn> must be declared. And can anybody throw some light on this! it would be much of help from you side, regards, Raasi
    I have pasted all the files with the error message please have a look
    ************** Descriptor file ****************88
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    <!-- a tag library descriptor -->
    <taglib>
         <!-- after this the default space is "http://java.sun.com/j2ee/dtds/jsptaglibrary_1_2.dtd" -->
         <tlibversion>1.0</tlibversion>
         <jspversion>1.1</jspversion>
         <shortname>csajsp</shortname>
         <urn></urn> <!-- problem is here. -->
         <info>
              A tag library from Core Servlets and JavaServer Pages, http://www.coreservlets.com/.
         </info>
         <tag>
              <name>example</name>
              <tagclass>coreservlets.tags.ExampleTag</tagclass>
              <info>Simplest example: inserts one line of output</info>
              <bodycontent>EMPTY</bodycontent>
         </tag>
         <!-- Other tags defined later... -->
    </taglib>
    The JSP file which is using that descriptor file
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <%@ taglib uri="csajsp-taglib.tld" prefix="csajsp" %>
    <TITLE><csajsp:example /></TITLE>
    <LINK REL=STYLESHEET HREF="JSP-Styles.css" TYPE="text/css">
    </HEAD>
    <BODY>
    <H1><csajsp:example /></H1>
    <csajsp:example />
    </BODY>
    </HTML>
    error message from Tomcat4.1 server
    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: XML parsing error on file /jsp/csajsp-taglib.tld: (line 9, col 7): Element type "urn" must be declared.
         at org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:189)
         at org.apache.jasper.compiler.TagLibraryInfoImpl.parseTLD(TagLibraryInfoImpl.java:247)
         at org.apache.jasper.compiler.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:183)
         at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:354)
         at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:381)
         at org.apache.jasper.compiler.Parser.parseElements(Parser.java:799)
         at org.apache.jasper.compiler.Parser.parse(Parser.java:122)
         at org.apache.jasper.compiler.ParserController.parse(ParserController.java:199)
         at org.apache.jasper.compiler.ParserController.parse(ParserController.java:153)
         at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:219)
         at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
         at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:474)
         at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:184)
         at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:289)
         at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:240)
         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:260)
         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.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:471)
         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.StandardContext.invoke(StandardContext.java:2396)
         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:170)
         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:405)
         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380)
         at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:508)
         at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533)
         at java.lang.Thread.run(Thread.java:536)
    Apache Tomcat/4.1.12
    ********************************8

    Hi,
    I have used the following dtd file for a simple tag you can use it by just replacing the tag properties
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE taglib
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd">
    <taglib>
         <tlib-version>1.0</tlib-version>
         <jsp-version>1.2</jsp-version>
         <short-name>CooperatingTags</short-name>
         <description>
         </description>
         <tag>
              <name>first</name>
              <tag-class>com.opera.tagclasses.FirstTag</tag-class>
              <body-content>EMPTY</body-content>
              <attribute>
                   <name>sessionID</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
         </tag>
    </taglib>
    I guess tag urn is not required.
    Hope this helps
    Ravi

  • Custom tag or help in reading an image file into the HTTP stream

    Since under WL we do not deploy our app physically there is no physical
              directory to write our dynamic images to (via kavachart).
              I can call their bean with:
              response.setContentType("image/png");
              ServletOutputStream output = response.getOutputStream();
              but that only allows the image back not the housing page. I can use an
              iframe but there are other issues and was wondering if anyone has idea on a
              custom tag the can easily read a physical directory outside of WL's space
              and include an image file in the http stream. Our app server and webservers
              are in separate zones so I can not just write to some virtual directory on
              the webserver and then serve it up w/ a simple <img> tag.
              BTW Kavachart has some tags referred to in their thin doc but I did not have
              good luck w/ their suggestions.
              Thanks in advance.
              dmg
              [email protected]
              

    Hi joe.com,
    Thanks for the response. It's greatly appreciated. Actually, I'm trying to run this on an Nokia SDK (s80 emulator) and eventually a windows mobile emulator.
    I was wondering if the JSR is the problem. I'm currently using jsr 62 and I'm thinking of trying to 216 to get PP 1.1. I'm wondering if 62 maybe limiting file io?
    any help is appreciated.

  • EL expressions not evaluated in custom tag attribute

    I'm writing a custom tag implementation where I need to have some attribute values
    dynamically evaluated using EL, such that I can write:
    <mytaglib:mytag id="${somevar}"/>
    I cannot seem to accomplish this, however. My taglib tag definition looks like this:
         <tag>
              <name>mytag</name>
              <tag-class>myclass</tag-class>
              <body-content>empty</body-content>
              <description>
    Foo
              </description>
              <attribute>
                   <name>articleId</name>
                   <required>true</required>
                   <rtexprvalue>true</rtexprvalue>
                   <type>java.lang.String</type>
              </attribute>
         </tag>
    The implementation of myclass extends TagSupport (since I need to get at the PageContext). The setArticleId() method looks like this:
    public void setArticleId(String idStr) throws JspException {
    if (logger.isDebugEnabled()) {
    logger.debug("idStr = " + idStr);
    try {
    /* XXX: Somehow, the evaluation should happen automagically, but
    * I can't figure out why that doesn't happen!
    String articleIdStr = (String)pageContext.getExpressionEvaluator().evaluate(
    idStr,
    java.lang.String.class, pageContext.getVariableResolver(), null);
    this.articleId = Integer.parseInt(articleIdStr);
    } catch (ELException e) {
    throw new JspException("Failed to parse article id expression");
    Why does it not work automagically?

    Make sure you are working with a JSP 2 container (like Tomcat 5). Also, you should make sure that your web.xml is configured to use the newest Servlet Spec. Read reply #6 on: http://forum.java.sun.com/thread.jspa?threadID=629437 to make sure it is set up properly.
    If you are not using a JSP 2.0 container, then you will not be able to use EL in your custom tag. See: http://forum.java.sun.com/thread.jspa?forumID=45&threadID=725503 for alternatives.

  • Unwanted body evaluation of a custom tag

    Following custom tag should output:
    [Tag Test]
    a
    b
    c
    This is another test
    a
    b
    c
    This bad boy!
    a
    b
    c
    But, in reality, the output is as follows:
    [Tag Test]
    a
    b
    c
    This is another test
    c
    a
    b
    c
    This bad boy!
    c
    a
    b
    c
    As you can see, everytime the tag is executed, unwanted body evaluation has occured before the assignment to a page-scope variable. What coud be the cause of the problem?
    /* tag handler */
    package mytag;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;
    import java.io.*;
    import javax.servlet.http.*;
    import java.util.*;
    public class foreach extends BodyTagSupport{
      private Iterator iterator;
      private String group;
      public void setGroup(String group){
        this.group = group;
      public  String getGroup(){
        return group;
      public int doStartTag() throws JspException{
        try{
          String[] intarray = new String[] {"a","b","c"};
          ArrayList ar = new ArrayList(Arrays.asList(intarray));
          iterator = ar.iterator();
          if (iterator.hasNext()){
            return EVAL_BODY_BUFFERED;
          else{
           return SKIP_BODY;
        catch (Exception e){
          System.err.println(e);
        return SKIP_BODY;
      public int doAfterBody() throws JspException{
        try{
          if (iterator == null){
            return SKIP_BODY;
          if (iterator.hasNext()) {
            String o = (String)iterator.next();
            pageContext.setAttribute("a1", o);   
            return EVAL_BODY_AGAIN;
          else{
            return SKIP_BODY;
        catch (Exception e){
          System.err.println(e);
        return SKIP_BODY;
      public int doEndTag() throws JspException {
        try {
          pageContext.getOut().print(bodyContent.getString());
        catch(Exception ioe) {
          System.out.println(ioe);
        return EVAL_PAGE;
    --test.jsp---
    <%@ page contentType="text/html" %>
    <%@ taglib prefix="jrun" uri="/WEB-INF/mytag.tld" %>
    <html><body bgcolor="lightgreen">
    <hr>
    [Tag Test]<br>
    <jrun:foreach group="itemsql">
    ${a1}<br>
    </jrun:foreach>
    <hr>
    This is another test<br>
    <jrun:foreach group="itemsql">
    ${a1}<br>
    </jrun:foreach>
    <hr>
    This bad boy!<br>
    <jrun:foreach group="itemsql">
    ${a1}<br>
    </jrun:foreach>
    <hr></body></html>
    --TLD-----------
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE taglib
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
    <taglib>
      <tlib-version>1.0</tlib-version>
      <jsp-version>1.2</jsp-version>
      <short-name></short-name>
      <description>
      </description>
      <tag>
        <name>foreach</name>
        <tag-class>mytag.foreach</tag-class>
        <body-content>JSP</body-content>
        <description>
        </description>
        <attribute>
          <name>group</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
        </attribute>
      </tag>
    </taglib>

    Never mind. I've found the cause of my problem. I shoud hava started the iterator in the doStartTag() metod instead of in the doAfterBody().

  • Problem deploying and using custom Tags in jar files

    I am trying to create a custom tag library of Java classes, package them in a JAR file, and use them in another web application. Here is the JAR file structure, named mytags.jar:
    META-INF
    META-INF/manifest.mf
    META-INF/taglib.tld
    mytags/FooBar.class
    mytags/Another.class
    ...Here is the taglib.tld file:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <taglib xmlns="http://java.sun.com/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
    version="2.0">
       <tlib-version>1.0</tlib-version>
       <short-name>foo</short-name>
       <uri>fooTags</uri>
       <info>My tags</info>
       <tag>
         <name>fooBar</name>
         <tag-class>mytags.FooBar</tag-class>
         <body-content>empty</body-content>
         <attribute>
           <name>name</name>
           <required>false</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>
      </tag>
    </taglib>The FooBar class has getName(String) and setName() methods.
    In the web application, I have copied mytags.jar into the WEB-INF/lib directory. I've verified that it lands in the corresponding directory for my appserver (I'm using Tomcat 6.0.10).
    Here's the header for my JSP:
    <%@ page language="java" contentType="text/html;charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib uri="fooTags" prefix="foo" %>
    <foo:fooBar name="dummy" />
    ...When I access my page, the browser sits there and spins, not able to do anything. I know that some of the content is executed, but it is not able to get to the fooTags. I have tried replacing fooTags with WEB-INF/lib/mytags.jar, to no effect.
    According to the docs, I should not need to include anything in web.xml to reference the fooTags. The tag library classes are valid, since I used them as local tags prior to moving them into a Jar library.
    Any help would be appreciated

    Take the code of the jsp file :
    <%@ page language="java" %>
    <%@ taglib uri="WEB-INF/struts-html.tld" prefix="html" %>
    <html>
       <head>
         <title> First Struts Application </title>
       </head>
         <body>
            <table width="500" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td> </td>
            </tr>
            <tr bgcolor="#36566E">
              <td height="68" width="48%">
                <div align="left">
                  <img src="images/hht.gif" width="220" height="74">
                </div>
              </td>
            </tr>
            <tr>
             <td> </td>
            </tr>     
           </table>
           <html:form action="Lookup"
                      name="lookupForm"
                      type="wiley.LookupForm" >
           <table width="45%" border="0">
            <tr>
              <td>Symbol:</td>
              <td><html:text property="symbol" /> </td>
            </tr>
             <tr>       
              <td colspan="2" align="center"><html:submit/> </td>
             </tr>       
            </table>              
          </html:form>
         </body>
    </html>

Maybe you are looking for