Файлы тегов JSP в подкаталогах, используя один префикс taglib. Это возможно?

В настоящее время у меня есть мои .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/теги/widgetsA/

/WEB-INF/теги/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>

Существует ли подобное решение?

UPDATE: BalusC показал, что можно использовать только один префикс, определяя все файлы тегов в одном .tld. Я предполагаю, что мой вопрос был недостаточно ясен: я хотел бы знать, можно ли использовать файлы тегов в нескольких подкаталогах, без указания пути к каждому из них в любом месте, кроме элемента, который их использует (например: < т: пользователи /onetag ")

Что мне не нравится в JSP-тегах, так это то, что они действуют совсем по-другому, чем обычные JSP файлы, даже если они действительно имеют очень похожий контент. На самом деле, я даже решил поместить все мои файлы jsp в папку /WEB -INF/tags/, поэтому они являются сторонними для файлов тегов (мне пришлось выбрать/WEB-INF/tags/для этого, так как это папка обязательна для файлов тегов, по какой-то причине)! Я не понимаю, почему некоторые из моих файлов, содержащих HTML, войдут в/WEB-INF/jsp/и некоторые другие в /WEB -INF/tags/!!

Я хочу иметь возможность группировать файлы jsp и tag в каталоги, в зависимости от того, с чем они связаны! Пример:

 /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, который я нахожу немного неудобным. Я буду жить с этим, но я думаю, что это может быть улучшено.

Ответ 1

Определите их как <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 />

Ответ 2

Образец, за которым я следую, хотя и не затрагивает проблему OP напрямую, я нахожу, что это делает ситуацию намного менее болезненной, что создает фрагмент JSP, где я определяю все taglib:

/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>

Ответ 3

Должен работать. Имена папок под указанным значением tag-dir становятся разделенными по частям частями имен тегов, которые вы использовали.