将Java变量传递给Javascript而不使用内联JS

Pass Java Variables to Javascript Without Using Inline JS

本文关键字:JS Javascript 变量 Java      更新时间:2023-09-26

这可能吗?我希望能够将java bean数据传递到javascript对象中,但是我真的不希望用一堆内联脚本标记弄乱我的jsp页面。我喜欢把我的javascript单独保存在外部文件中,但如何在不使用内联js的情况下完成这样的事情?

<script type="text/javascript">
        var variableFromServer = '${someBean.someProperty}';
</script>

您可以创建一个包含所有数据的JSON文件,并将其内联包含或通过Ajax获取JSON—这样就不会使标记与数据混淆。关于JSP-JSON模板的示例,请参阅http://json-taglib.sourceforge.net/。

我不确定这是否值得,但另一种选择是在type="hidden"的输入文件中设置所需的值,并获得它在js中。但是这也会在GET和POST请求中传递这个参数。

你可以做你在代码片段中做的事情(你认为这是"内联JS"吗?),创建一个JSON的div,其中包含数据(暴露为单个字符串)并处理它,通过JSP进程传递JS文件(或使用不同的模板系统动态JS页面),等等。

我不是一个通过JSP处理JS文件的超级粉丝;在包括我真正的JS之前,我经常会在主体底部的<script>标签中创建一个对象,其中包含我的JS所需的所有信息。这是一种懒惰,但它是直接的

我过去使用的一个选项是配置servlet容器以在*.js文件上运行JSP解释器。如何设置将取决于您正在运行的服务器。

请注意,如果你想以这种方式访问任何请求属性,你需要将它们设置为获取JavaScript文件的请求的一部分(即,你必须在JavaScript前面有一个servlet…或者作为替代方案,您可以使用include指令来引入脚本,而不是<script src='...'>标记)。您可以访问会话属性,而无需在JavaScript文件前面设置自定义servlet。

我喜欢用简单的方法来做,所以我创建了一个脚本元素,它从Java中设置了最少数量的JS变量-理想情况下,一个JS变量被设置为具有不同属性的对象,用于您需要传递的所有不同的数据位。Java代码基本上只是输出JSON,它将在JS中被解释为对象字面量。在此之后立即包含任何外部脚本-因为它们是在之后包含的,所以它们可以使用已经创建的变量。

你可以把上面的内容放在正文的开头或结尾。(或者在中间,但这真的没有意义。)

<html>
<head>
</head>
<body>
<!-- actual HTML markup here -->
<script>
     var variableFromServer = '${someBean.someProperty}',
         objectFromServer =  /* jsp to spit out JSON here as appropriate */ ;
</script>
<!-- external files included after the above will be able to access
     those variables -->
<script src="external1.js" type="text/javascript"></script>
<script src="external2.js" type="text/javascript"></script>
<script src="etc.js" type="text/javascript"></script>
</body>
</html>

你当然不需要"一堆内联脚本标签"——即使把所有的值放在一个对象中没有意义,至少在一个脚本元素中创建所有的变量,然后你所有的其他JS可以在一个外部文件中。

(根据需要添加命名空间)