JS运行后发生JSP变量初始化

时间:2017-06-15 13:54:24

标签: javascript jsp liferay

我在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?

1 个答案:

答案 0 :(得分:2)

不要这样做

您无法使用scriptlet或JSTL初始化JavaScript变量。 Java代码在服务器上执行,不会在jsp页面上以自上而下的顺序执行。

虽然我不建议这样做,但您可以使用以下

<script type="text/javascript">
var message = '<c:out value="${json}"/>';
</script>

这将在技术上有效 - 但我想强调我不推荐这个。也许你可以准确地解释你想要完成的事情,我们可以推荐一种更优化的方法。

JSTL诉Scriplets

您可能也会使用JSTL和scriplets一起使用范围问题。它们的范围不同。 JSTL适用于以下范围。

  • 请求
  • 会话
  • 应用

Scriplets始终位于页面范围内。所以虽然您的代码不包含此问题,但很可能会遇到这种情况。

建议

如果您正在使用Liferay,我建议您学习Alloy UI(JavaScript库)并熟悉其AJAX模块。通常,当我看到您发布的代码时,最好有一个AJAX函数,在需要时为JSON调用您的portlet。