如何让多个jsp标签库使用相同的前缀?

时间:2012-02-03 04:01:09

标签: jsp jsp-tags

在我的jsp中,我使用了4个标记库。声明是:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="cms" uri="/WEB-INF/tags/cms/tag.tld"%>

每个都有一个唯一的前缀。

但是我想为所有这些使用单个前缀,所以我将它们更改为:

<%@ taglib prefix="cms" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="cms" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="cms" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="cms" uri="/WEB-INF/tags/cms/tag.tld"%>

报告错误。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

您不能在同一JSP中的两个不同标记库中使用相同的标记前缀。标记前缀将指定JSP使用哪个标记库,以及从哪个类文件中使用。对于标签。

每个taglib应该有不同的标记前缀。

答案 1 :(得分:1)

每个taglib指令都在标记库描述符下导入标记,称为 TLD TLD将包含由标记名称标识的标记集。此处的标记名称不是普遍唯一的。 两个TLD可以使用同名的标签。这就是为什么TLD的名称空间只是TLD URI(http://java.sun.com/jsp/jstl/core,http://java.sun.com/jsp/jstl/functions, ...)。

因此,在使用任何标记时,应清楚地告知标记必须加载哪个TLD 。并且,因为在每个标记之前提供URL很困难而且不可读,我们在标记lib指令中使用前缀的帮助为URI提供别名。

因此,您不能为多个TLD提供相同的前缀