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

从自定义JSP标记导出作用域变量

从光启
2023-03-14

在JSTLfmt标记库中,是标记formatDate,它有一个可选属性var。使用formatDate标记时,可以通过var属性传入一个字符串,该属性指定将要创建的变量的名称,其值将是格式化的日期字符串。

不幸的是,Java(从Java8开始)不支持我需要的汤加和萨摩亚地区。因此,一位同事创建了一个自定义日期格式标签,基本上只使用fmt:formatDate对日期进行格式设置,然后(在汤加和萨摩亚的情况下)用适当的翻译替换日期名称和月份名称值。但是,这个自定义标记只输出(使用c:out)结果,我想增强自定义标记,使其能够创建一个变量,就像fmt:formatDate那样。不幸的是,我不知道怎么做。

c:set不允许在其var属性中使用表达式,并且由于某些原因,pageContext在自定义标记文件(date formatter.tag)中为空。

以下是标记定义的内容,减去无关的细节(假设包括cfmttaglib,以及dateFormatterLocale变量):

<%@attribute name="value" type="java.util.Date" required="true" rtexprvalue="true" description="..." @>
<%@attribute name="type" required="true" rtexprvalue="true" description="..." %>
<%@attribute name="pattern" required="true" rtexprvalue="true" description="..." %>
<%@attribute name="var" required="false" rtexprvalue="false" description="..." %>

<fmt:formatDate type="${type}" pattern="${pattern}" value="${value}" var="dfFormattedDate" />
<c:if test="${((dateFormatterLocale == 'to') || (dateFormatterLocale == 'sm'))}">
    ...
    [stuff to translate day names and month names]
    ...
</c:if>
<c:choose>
    <c:when test="${not empty var}">
        <%-- SOMEHOW SET VARIABLE WHOSE NAME IS THE VALUE OF "var" AND WHOSE VALUE IS THE VALUE OF dfFormattedDate --%>
    </c:when>
    <c:otherwise>
        <c:out value="${dfFormattedDate}" />
    </c:otherwise>
</c:choose>

共有1个答案

邵阳
2023-03-14

使用

例如,如果您需要将其限定为请求范围:

<c:set target="${requestScope}" property="${var}" value="${dfFormattedDate}" />

或页面范围:

<c:set target="${pageScope}" property="${var}" value="${dfFormattedDate}" />

 类似资料:
  • 我正在创建一个自定义JSP标记,以从数据对象生成表。为了使代码更简洁,我想为行创建一个单独的标记文件,但我似乎无法在我的主自定义标记中包含自定义标记(抱歉,我知道这很混乱)。 例如我有: 桌子标签: 一行标签 注意第一个文件中的导入(<代码> 我试图将导入更改为<代码> 我做错了什么?

  • 主要内容:自定义标签的语法,简单示例,tld标签库描述文件,自定义标签属性,自定义标签的标签体自定义标签就是用户(开发者)自己定义的标签。自定义标签可以让 JSP 页面中不含有 Java 代码,只含有 HTML 代码和部分标签,就能实现业务逻辑的调用。 自定义标签的优点如下: 减少 JSP 页面对脚本的需求和依赖性 将 JSP 页面和业务逻辑分开,增加了程序的可维护性 可重复调用相同的业务逻辑,增加了程序的可重用性 使用自定义标签步骤如下: 自定义标签实现类 编写 tld 标签库描述文件

  • 自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。 JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。 你可以继承SimpleTa

  • 我在这里做错了什么: 我一直在 但这很好: 显然我想避免 没有也不行,我的jstl不知道

  • 导出为HTML会生成以下内容: 报告在页面上居中,但应左对齐。 使用JRHtmlExporter的HTML\u HEADER参数看起来很有希望,但这些类已被弃用。这就是解决方案: 现在我必须使用网络。旧金山。jasperreports。出口HtmlExporter和net。旧金山。jasperreports。出口SimpleHtmlReportConfiguration类,如下所示: 您将如何修复

  • 因此,我想访问子标记result1、result2、result3中父标记属性test1、test2、test3(这些属性的返回值为true/false)的结果,以根据返回的条件值显示输出,不管它是true还是false。 谢谢,开发者。