我正在开发Apache Sling WCMS并使用java标签库来渲染一些数据。
我正在使用IntelliJ IDEA 10.0
我使用以下描述符和处理程序类定义了一个jsp标记库:
TLD文件包含:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<short-name>taglibdescriptor</short-name>
<uri>http://bob/taglibs</uri>
<tag>
<name>testTag</name>
<body-content>tagdependent</body-content>
<tag-class>org.bob.taglibs.test.TestTagHandler</tag-class>
</tag>
</taglib>
标记处理程序类:
package org.bob.taglibs.test;
import javax.servlet.jsp.tagext.TagSupport;
public class TestTagHandler extends TagSupport{
@Override
public int doStartTag(){
try {
pageContext.getOut().print("<h1>Helloooooooo</h1>");
} catch(Exception e) {
return SKIP_BODY;
}
return EVAL_BODY_INCLUDE;
}
}
我将标签lib打包为BobTagLib.jar,并使用Sling Web Console将其部署为捆绑包。
我在我的Sling存储库中部署的jsp页面中使用了此标记lib:
的index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="bob" uri="http://bob/taglibs" %>
<html>
<head><title>Simple jsp page</title></head>
<body>
<bob:testTag/>
</body>
</html>
(编辑)的 MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: Bob Tech
Built-By: babak
Bundle-Version: 1.0.0
Bundle-Name: Bob Tag Library
Build-Jdk: jdk1.6.0_18
Bundle-Vendor: The Bob Technology Foundation
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.bob.taglibs
Bundle-Category: sling
调用该页面会导致以下异常:
org.apache.sling.scripting.jsp.jasper.JasperException: /apps/TagTest/index.jsp(7,5) Unable to load tag handler class "org.bob.taglibs.test.TestTagHandler" for tag "bob:testTag"
...
任何人都可以帮我解决一下吗?
事先,任何帮助都是合理的。
答案 0 :(得分:2)
看起来您的taglib已找到,但您的包不会导出org.bob.taglibs包,因此JSP脚本和其他包不可见。
添加
Export-Package: org.bob.taglibs.*;version=1.0
标题到你的MANIFEST.MF应该修复它。
如果这不能解决您的问题,您可能需要将taglib与已知有效的Sling JSP taglib进行比较。