将Java变量传递给Javascript而不使用内联JS
Pass Java Variables to Javascript Without Using Inline JS
这可能吗?我希望能够将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可以在一个外部文件中。
(根据需要添加命名空间)
- node.js/javascript/couchdb视图到关联数组似乎不起作用
- LeadLander formalyze_init.js Javascript外部文件
- 关于node.js/javascript在文件之间共享变量
- Node.js - Javascript - 将文件解析为嵌套对象
- three.js javascript/raycasting代码与retina显示器Mac不兼容
- 节点中的变量.js JavaScript 不会改变
- 如何使用并行/多线程Hamsters.js Javascript库编辑数组中的对象属性
- 使用processing.js/javascript在dropbox中写入txt文件
- Node.js/Javascript库来测试点是否在geojson多极子中
- Intellij IDEA riot.js javascript风格支持
- enquire.js javascript没有't执行(enquire.js,Modernizr,jQuery)
- 需要相当于three.js javascript'loadTexture'陈述
- 如何创建一个考虑时区Node.JS/javascript的JS日期对象
- Three.js Javascript对象转换问题
- Kinetic.js / Javascript:在不使用 eval() 的情况下调用变量作为属性
- 如何使用 Angular.js/javascript 将 JSON 数组值替换为新值
- 存储来自多个回调节点的数据.js javascript
- Node.JS/Javascript - 将字符串转换为整数正在返回 NaN,而我不希望它这样做
- moment.js javascript dat object
- jquery.validate 中的错误.js“javaScript 运行时错误:无法获取未定义或空引用的属性'