从自定义 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>
如果这是一个愚蠢的问题并且重复,我们深表歉意。
请问如何(以及是否)可以从自定义 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>