在不使用Inline JS的情况下将Java变量传递给Javascript

时间:2011-12-06 05:15:52

标签: java javascript jsp

这可能吗?我希望能够将java bean数据传递给javascript对象,但我真的不想用一堆内联脚本标签来破坏我的jsp页面。我喜欢将我的javascript分开保存在外部文件中,但是如何在不使用内联js的情况下完成这样的操作?

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

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我不确定这是否值得,但另一种方法是在输入字段中设置所需的值,类型为“隐藏”,并将其设置为js。但是这也会在表单中的GET和POST请求中传递此参数。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

我不是通过JSP处理JS文件的忠实粉丝;在包含真正的JS之前,我经常会在身体底部的<script>标签中创建一个包含我需要的所有信息的对象。它有点懒惰,但它是直截了当的。

答案 4 :(得分:0)

我很喜欢这种简单易行的方式,因此我创建了一个单独的脚本元素,它具有从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可以在外部文件中。

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