gpt4 book ai didi

输出其主体或在变量中返回它的 JSP 标记文件

转载 作者:行者123 更新时间:2023-12-04 02:54:08 27 4
gpt4 key购买 nike

我在“.tag”文件中有一个自定义标签,用于计算和输出一个值。因为我不能在这里发布代码,让我们假设一个简单的例子。

文件 mytag.tag 的内容:

<@tag dynamic-attributes="dynamicParameters">
<%@attribute name="key" required="true"%> <%-- this works fine, in spite of dynamic-attributes --%>
<jsp:doBody var="bodyContent/">
<%-- ... here is some code to compute the value of variable "output" --%>
${output}

调用者可以很容易地像这样调用它:
<prefix:mytag key="foo">Body content...</prefix:mytag>

这将插入标签的输出。但我也会让调用者做这样的事情:
<prefix:mytag key="foo" var="mytagOutput">Body content...</prefix:mytag>

在这种情况下,输出实际上不会被写入,而是分配给变量“mytagOutput”,然后调用者可以使用它。

我知道调用者可以通过将自定义标签包装在 c:set 中来实现这一点。 ,但这不如简单地声明一个“var”那么优雅。我也知道 @variable带有 name-from-attribute 的指令可以用来实现这一点。但是,我不知道调用者是否已经给出了属性“var”。 (如果给定,我想将 ${output} 分配给该变量,否则我只想写出 ${output} 。)

有没有办法确定“var”属性是否已传入?

另一种选择是创建第二个自定义标签,可能称为“getMytag”,它总是需要“var”属性,并将“mytag”包装在 c:set 中。 .如果我在这里找不到解决方案,我会去做。

(如果之前有人问过这个问题,请指点我。我快速搜索,但没有找到类似的问题。)

最佳答案

遇到了同样的问题,并找到了一种方法,无需在 .jsp 和 .tag 之间匹配的“硬编码”变量名称。

<%@ taglib prefix="c"   uri="http://java.sun.com/jsp/jstl/core"%><%@ 
taglib prefix="s" uri="http://www.springframework.org/tags" %>

<jsp:directive.attribute name="someInput" type="java.lang.Object" required="true" rtexprvalue="true" description="Input object" />
<jsp:directive.attribute name="var" type="java.lang.String" required="false" rtexprvalue="false" description="Optional return var name" />

<s:eval expression="@someService.someMethod(someInput)" var="someOutput" />

<c:choose>
<c:when test="${not empty var}">
${pageContext.request.setAttribute(var, someOutput)}
</c:when>
<c:otherwise>
${someOutput}
</c:otherwise>
</c:choose>

这个标签有两种使用方式:
<%-- Option 1: renders the output of the tag directly to the page --%>
<some:tagname someInput="${yourVar}" />

<%-- Option 2: stores the output of the tag in variable called "result" and lets the caller render the output on his own --%>
<some:tagname someInput="${yourVar}" var="result" />
<c:out value="${result}"/>

关于输出其主体或在变量中返回它的 JSP 标记文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6042518/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com