从自定义 JSP 标签传递一个作用域为脚本的变量

Passing a variable scoped to script from a custom JSP tag

如果这是一个愚蠢的问题并且重复,我们深表歉意。

请问如何(以及是否)可以从自定义 JSP 标签传递(脚本范围的)变量 prefix:tag attribute name

作为<my:example var = '${foo}'> </my:example>

其中 foo 定义在 <script>?

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
            pageEncoding="UTF-8"%>
<%@ taglib prefix="my" tagdir="/WEB-INF/tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script>
    var foo = "bar";
</script>

<my:example var='${foo}'></my:example> --> I'd not like to pass a constant here. That being said, I believe I am not thinking in the right way of how a variable is passed whose scope is local to the script tag?
</html>

example.tag

<%-- example.tag --%>
<%@ attribute name="var" required="true" rtexprvalue="true"%>
<p>Hello, ${var}! :)</p> --> I'd wish this to be printed as whatever is passed from the custom tag; however, and please correct me if I am wrong, I could not find any resources online that do not pass constants from the custom tag

Expected Output

Hi, bar! :)

Actual Output

Hi, ! :)

请指出正确的方向并帮助我理解我在这里做错了什么,以及我如何才能改进我在未来解决此类问题时的想法?我将不胜感激任何帮助。谢谢!

JSP 在服务器端计算,而脚本在客户端(浏览器)端计算。因此,foo 变量不会分配任何值,除非 html 是从 jsp 生成的 - 脚本中定义的变量仅在生成 html 之后才启动 'existing'发送到浏览器并由其评估。

因此,据我所知,您的问题的简短答案是:无法直接传递在 <script> 标记内声明的 foo 变量以在 [=42= 内使用](在服务器端)

如果您希望输出的值为 foo,您必须在 jsp 中声明变量,或者使用 JS 更改 <p> 标记的值。选择取决于您是否可以在服务器端分配值,或者它应该可以在客户端的操作上修改。

虽然以下代码片段可能不完整,但它们应该为您指明了大致方向。

服务器端(JSP):

(...)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
(...)
<c:set var="foo" value="bar">

客户端 (JS) - 此处您必须进行更多修改:

example.tag - 你可以为你的 <p> 标签设置一个带有 id 的 <span>,这样你就可以从脚本中访问它:

(...)
<p>Hello, <span id="foo"></span> :)</p> 

然后您可以使用 js 访问 foo span 标签:

<script>
var foo = document.getElementById('foo');
foo.textContent = "bar";
</script>