当前位置: 首页 > 知识库问答 >
问题:

子目录中的JSP标记文件,使用单个标记库前缀。这可能吗?

庞旺
2023-03-14

我目前有我的。标记文件声明为:

<%@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>

更新:BalusC通过在单个. tl中定义所有标签文件,表明可以只使用一个前缀。我想我的问题当时还不够清楚:我想知道是否可以在多个子目录中使用标签文件,而无需在使用它们的元素之外的任何地方指定每个它们的路径(例如:”

我不喜欢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

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

共有3个答案

东门理
2023-03-14

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

裴楚青
2023-03-14

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

/WEB-INF/视图/标记库。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>
储法
2023-03-14

将它们定义

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

 类似资料:
  • 在我的Struts 1应用程序中的jsp中,我试图使用c: set标签从显示表中的列表中设置变量。 表中的每一行都有一个值(100或200),用于区分是哪个用户添加了条目。我只想为某个用户显示编辑/删除(100)。 我正在尝试设置该值并将其与100进行比较,以确定哪些行应具有编辑/删除权限。 我遇到的问题是rowUser没有从我的列表中分配值。 我知道列表中有值,因为表正在显示,但它们显示的所有行

  • 我想在jsp文档文件中使用类似的内容: 但是,在我看到的所有30个示例中,每个人都使用简单的jsp语法,而不是jsp文档语法。类似于这样: 根本不起作用。页面上看不到驻留在 /WEB-INF/tags中的所有标记文件。只有当我定义一个tld文件并在其中列出所有标记时,才能在页面上访问它们。是否可以避免tld声明并仍然在jsp文档页面中使用标记文件?

  • 我有一个JSP文件,其中包含另一个JSP文件: 在文件中instance.jsp我想使用一个变量。我想使用JSTL来完成它。有什么方法可以做到这一点吗?

  • 我正在尝试创建一个安装在sling中的捆绑包,并使用自定义TagLib。我想使用标记文件,而不是使用扩展TagSupport的java类。这样,我可以使用Sling模型来表示JCR,使用JSP标记文件来表示标记。 这是我的标记文件,它是一个非常基本的锚,没有什么特别的,我只是想测试一下: 我创建了一个TLD文件,我在WEB-INF/tags和META-INF/tags文件夹中都尝试了该文件(我去掉

  • 可能重复: 在锚中放置div是否正确? 当我们编写某种“产品列表”时,您只需要一个链接,但它应该包含产品图像、产品名称、产品标题等。我们可以使用contain p或其他标签吗?是否存在跨浏览器问题? 我听说在html5中,一个标签可以包含p标签,但是仍然没有使用它的信心。 一些代码是这样的:

  • 我正在使用JAXB来生成一个肥皂xml请求。我想要的当前xml输出是这个 到目前为止,我已经生成了信封和标题标签,但我有安全标签的问题。 我的问题是,如果我尝试将xmlns设置为package-info.class前缀是正确的,但是和转到根元素(信封)而不是安全标记。这是我得到的输出: 正如您在所需的 xml 输出中看到的 和 命名空间位于安全标记处。如何才能将这些xmlns添加到安全标签?以及用