【问题标题】:Jstl: using scriptlet inside custom tagsJstl:在自定义标签中使用 scriptlet
【发布时间】:2013-05-27 18:02:47
【问题描述】:

我使用自定义标签来创建某种母版页(模板)。 构造如下:

// Template
<%@ tag description="master" pageEncoding="UTF-8"%>
<%@ attribute name="js" fragment="true" %>
<!doctype html>
<html>
<head>
    <jsp:invoke fragment="js" />
</head>
<body>
</html>

// Page
<%@ page pageEncoding="UTF-8"%>   
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %> 
<t:master>
    <jsp:attribute name="js">
        <script type="text/javascript" src="<spring:url value="/javascript/administration/customers.js" />"></script>
    </jsp:attribute>
</t:master>

在我尝试使用通用解决方案通过在 js 文件名末尾添加随机字符串来禁用浏览器端 javascript 缓存之前,它工作正常:

<script type="text/javascript" src="<spring:url value="/javascript/administration/customers.js" />?<%= new java.util.Date().getTime() %>"></script>

它失败了

脚本元素(

异常

我该如何实施这样的解决方案?谢谢

【问题讨论】:

  • 这个错误非常具有描述性:它说你是not use scriptlets
  • @LuiggiMendoza 谢谢,但我明白错误在说什么......问题不同
  • 题目开头的题目与题目内容无关...
  • @LuiggiMendoza 是的,我的错。固定
  • 根据您的修复,您必须已经知道您不应该使用 scriptlet。该技术禁止这样做(并且正在做正确的工作)。最好按照 EL/JSTL 的顺序重新考虑您的设计,而不是使用 scriptlet。

标签: java javascript jsp jstl


【解决方案1】:

一个疯狂的建议:-)

使用 usebean 在请求范围内生成一个新的 Date 对象。然后,每个请求都会导致创建一个新的 Date 对象。这将在整个请求中重复使用。

 <jsp:useBean id="uniqueDate" class="java.util.Date" scope="request"/>  

然后在日期对象上调用 getTime() 方法(如评论中所建议的那样)。

${uniqueDate.time}

【讨论】:

  • BalusC 意味着您可以使用 &lt;c:set&gt; 来维护纯 JSTL/EL 代码并使用 ${uniqueDate.time} 调用变量,而不是使用 &lt;jsp:useBean&gt;
  • 不,我认为他根本不是这个意思。请注意,我的答案的下半部分已被编辑并替换为他评论中的内容。另外,请解释 如何替换 ?
猜你喜欢
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 2012-02-24
相关资源
最近更新 更多