12

我目前有我的 .tag 文件声明:

<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>

标记文件的路径示例:

/WEB-INF/tags/test.tag

我像这样使用它们:

<t:test oneAttributeKey="oneAttributeValue">
   some content...
</t:test>

我的问题:我不想将所有标签文件放在一个文件夹“/WEB-INF/tags”中。

我希望将它们放在不同的子目录中:

/WEB-INF/标签/用户/

/WEB-INF/tags/widgetsA/

/WEB-INF/tags/widgetsB/

(...)

这是否可能,无需为每个人创建不同的 taglib 前缀

我想避免的例子:

<%@taglib prefix="t_users" tagdir="/WEB-INF/tags/users" %>
<%@taglib prefix="t_widgetsA" tagdir="/WEB-INF/tags/widgetsA" %>
<%@taglib prefix="t_widgetsB" tagdir="/WEB-INF/tags/widgetsB" %>

我想要的示例,使用单个“t”前缀:

<t:users/onetag oneAttributeKey="oneAttributeValue">
   some content...
</t:users/onetag>

是否存在类似的解决方案?

更新:BalusC 表明,通过在单个 .tld 中定义所有标记文件,可以只使用一个前缀。我想我的问题还不够清楚:我想知道是否可以在多个子目录中使用标签文件,而不必在任何地方指定每个标签文件的路径,除了在使用它们的元素中(例如:“ <t:users/onetag")!

我不喜欢 JSP 标记的一点是,它们的行为与常规 JSP 文件非常不同,即使它们实际上共享非常相似的内容。事实上,我什至决定将我所有的 jsp 文件放在 /WEB-INF/tags/ 文件夹中,这样它们就与标签文件并排(我必须为此选择 /WEB-INF/tags/,因为这出于某种原因,标签文件的文件夹是必需的)!我不明白为什么我的一些包含 HTML 的文件会进入 /WEB-INF/jsp/ 而其他一些文件会进入 /WEB-INF/tags/!!

我希望能够将 jsp 和标记文件分组到目录中,具体取决于它们的相关内容!例子 :

 /WEB-INF/tags/users/userProfileLayout.tag
 /WEB-INF/tags/users/employeeProfile.jsp
 /WEB-INF/tags/users/employerProfile.jsp

 /WEB-INF/tags/widgetsA/widgetALayout.tag
 /WEB-INF/tags/widgetsA/oldWidgetA.jsp
 /WEB-INF/tags/widgetsA/newWidgetA.jsp

但这迫使我在多个@tablib 或.tld 中声明每个子目录的路径,我觉得这有点不方便。我会忍受它,但我认为它可以改进。

4

3 回答 3

18

将它们定义为放在文件夹<tag-file>中的单个.tld文件中/WEB-INF

例如/WEB-INF/my-tags.tld

<?xml version="1.0" encoding="UTF-8" ?>
<taglib 
    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"
    version="2.1"
>    
    <display-name>My custom tags</display-name>    
    <tlib-version>1.0</tlib-version>
    <short-name>my</short-name>
    <uri>http://example.com/tags</uri>

    <tag-file>
        <name>foo</name>
        <path>/WEB-INF/tags/users/foo.tag</path>
    </tag-file>

    <tag-file>
        <name>bar</name>
        <path>/WEB-INF/tags/widgetsA/bar.tag</path>
    </tag-file>

    <tag-file>
        <name>baz</name>
        <path>/WEB-INF/tags/widgetsB/baz.tag</path>
    </tag-file>
</taglib>

在您的 JSP 中使用它,如下所示

<%@taglib prefix="my" uri="http://example.com/tags" %>
...
<my:foo />
<my:bar />
<my:baz />
于 2012-05-15T02:38:25.150 回答
0

我遵循的一种模式,即使没有直接解决 OP 的问题,我发现它使整个情况变得不那么痛苦,它创建了一个 JSP 片段,我在其中定义了所有标记库:

/WEB-INF/views/taglibs.jspf

<%@ 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="layout" tagdir="/WEB-INF/tags/layout" %>
<%@ taglib prefix="t_users" tagdir="/WEB-INF/tags/users" %>
<%@ taglib prefix="t_widgetsA" tagdir="/WEB-INF/tags/widgetsA" %>
<%@ taglib prefix="t_widgetsB" tagdir="/WEB-INF/tags/widgetsB" %>

然后在每个 JSP 文件的顶部包含这个 JSP 片段:

/WEB-INF/views/users/employeeProfile.jsp

<%@ include file="/WEB-INF/views/taglibs.jspf" %>

<layout:main>
    <h1>Employee Profile</h1>
    ...
</layout:main>
于 2017-03-16T15:56:06.640 回答
-1

应该管用。指定 tag-dir 值下的文件夹名称成为您将使用的标签名称的连字符分隔部分。

于 2012-05-25T06:49:56.140 回答