将定义的变量传递给自定义JSP标记中的脚本

时间:2018-01-23 12:11:11

标签: jsp tags jsp-tags

道歉,如果这是一个愚蠢的问题,如果它是重复的。

请问如何(以及是否)可以从自定义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, ! :)

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

1 个答案:

答案 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>