我在Liferay portlet中初始化JSP字符串:
String json = "{}";
// returns json
json = LiferayPortlet.makeCurlCall();
...
<script>
$(window).load(function(){
//initialize js variable
jsData = "${json}";
// initialize the page
initializePage(jsData);
});
</script>
我遇到的问题是LiferayPortlet.makeCurlCall();
正在返回json,但jsData
未初始化为它,而是将其设置为""
。有没有办法将jsData
初始化为从上面的函数返回的json?
答案 0 :(得分:2)
您无法使用scriptlet或JSTL初始化JavaScript变量。 Java代码在服务器上执行,不会在jsp页面上以自上而下的顺序执行。
虽然我不建议这样做,但您可以使用以下
<script type="text/javascript">
var message = '<c:out value="${json}"/>';
</script>
这将在技术上有效 - 但我想强调我不推荐这个。也许你可以准确地解释你想要完成的事情,我们可以推荐一种更优化的方法。
您可能也会使用JSTL和scriplets一起使用范围问题。它们的范围不同。 JSTL适用于以下范围。
Scriplets始终位于页面范围内。所以虽然您的代码不包含此问题,但很可能会遇到这种情况。
如果您正在使用Liferay,我建议您学习Alloy UI(JavaScript库)并熟悉其AJAX模块。通常,当我看到您发布的代码时,最好有一个AJAX函数,在需要时为JSON调用您的portlet。