我正在创建一个自定义标记库,并希望在我的一个组件中使用它。我创建了一个包含标签hello类的包,它扩展了TagSupport类,我在我的资源文件夹下创建了tags.tld文件
在我的pom.xml中,我使用了资源标记将我的.tld文件包含在生成的jar文件中。
这是我的java类和tld文件
TAG CLASS: -
package com.cb;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
/**
* Simple tag example to show how content is added to the
* output stream when a tag is encountered in a JSP page.
*/
public class Hello extends TagSupport {
private String name=null;
/**
* Getter/Setter for the attribute name
as defined in the tld file
* for this tag*/
public void setName(String value){
name = value;
}
public String getName(){
return(name);
}
/**
* doStartTag is called by the JSP container
when the tag is encountered */
public int doStartTag() {
try {
JspWriter out = pageContext.getOut();
out.println("<table border=\"1\">");
if (name != null)
out.println("<tr><td> Welcome <b>" + name +
"</b> </td></tr>");
else
out.println("<tr><td> Hello World </td></tr></table>");
} catch (Exception ex) {
throw new Error("All is not well in the world.");
}
// Must return SKIP_BODY because we are not
//supporting a body for this
// tag.
return SKIP_BODY;
}
/**
* doEndTag is called by the
JSP container when the tag is closed */
public int doEndTag(){
return EVAL_PAGE;
}
}
我也成功地在我的felix控制台中安装了捆绑包而没有任何错误。然后我在我的jsp中写了自定义标签,如下所示
JSP: -
<%@include file="/libs/foundation/global.jsp"%>
<%@ page import="com.testcb.TestCustomTag"%>
<%@ taglib prefix="mytest" uri="http://cs.test.com/bundles/cq/1.8"%>
<mytest:hello name="sachin"></mytest:hello>
我得到的结果是“org.apache.sling.api.scripting.ScriptEvaluationException:org.apache.sling.scripting.jsp.jasper.JasperException:/apps/test/components/content/test/test.jsp( 4,0)无法为标签“mytest:hello”加载标签处理程序类“com.cb.Hello”。
相同的代码在我的apache tomcat服务器上工作正常,没有任何问题。当我将它合并到CQ中时,我收到了错误。
我在这做什么?我是否需要在OSGI控制台中进行任何配置才能使其可用?
更新
包名有问题。现在,在我重命名包名后,Sling可以读取我的标签处理程序类。
错误“无法加载标记处理程序类”也已消失。
现在我收到错误“ org.apache.sling.api.scripting.ScriptEvaluationException:javax.servlet.ServletException:javax.servlet.jsp.JspException:com.testcb.TestCustomTag无法转换到javax.servlet.jsp.tagext.Tag “
我在pom.xml中有以下依赖
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
这是我的标准
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/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">
<description>My tag library123</description>
<tlib-version>1.0</tlib-version>
<short-name>TagLib-Test</short-name>
<uri>http://cs.test.com/bundles/cq/1.0</uri>
<jspversion>2.1</jspversion>
<tag>
<name>testcustomtag</name>
<tagclass>com.testcb.TestCustomTag</tagclass>
<bodycontent>empty</bodycontent>
<info>This is a simple hello tag</info>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
jsp版本有什么问题吗?
请指导我解决。
由于
答案 0 :(得分:2)
tags.tld文件需要位于META-INF文件夹下。如果您还没有,可以在资源源文件夹下创建一个。
答案 1 :(得分:0)
是的,在我删除pom.xml中的标记后,它正在按预期工作。这是原因问题。 :)
谢谢!