道歉,如果这是一个愚蠢的问题,如果它是重复的。
请问如何(以及是否)可以从自定义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, ! :)
请指出正确的方向并帮助我了解我在这里做错了什么,以及如何在未来改善我对解决这些问题的想法?我将不胜感激任何帮助。谢谢!
答案 0 :(得分:0)
在服务器端评估JSP,在客户端(浏览器)端评估脚本。因此foo
变量不会分配任何值,除非从jsp生成html - 在脚本中定义的变量开始&#39;现有&#39;只有在生成的html被发送到浏览器并由它进行评估之后。
所以,据我所知,你的问题的简短答案是:它无法直接传递foo
标签内声明的<script>
变量来在jsp中使用(在服务器端)
如果希望输出的值为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
- 您可以为<span>
标记设置<p>
,以便您可以从脚本中访问它:
(...)
<p>Hello, <span id="foo"></span> :)</p>
然后您可以使用js:
访问foo
span标记
<script>
var foo = document.getElementById('foo');
foo.textContent = "bar";
</script>