创建liferay portlet - 如何通过view.jsp从Java类传递数据到myScript.js

时间:2013-10-04 13:55:47

标签: java javascript jsp servlets

我正在使用Liferay portlet并遇到一些问题。我想要实现的是访问在java类中呈现页面时创建的一些数据并将其传递给我的JavaScript。我认为我的问题是我对变量范围的理解。

我已经想出如何将这两个变量传递给view.jsp文件中的JavaScript:

Creating liferay portlet - how to pass data to view.jsp from Java class?

http://www.opensource-techblog.com/2012/08/creating-custom-liferay-mvc-portlet.html

我现在拥有的:

java-servlet类:

public class TestPortlet extends MVCPortlet {

  @Override
  public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
    renderRequest.setAttribute("test_variable_actionRequest_setAttribute", "TestValue");
    super.doView(renderRequest, renderResponse);
  }
}

我的观点.jsp:

<%@page%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>

<portlet:defineObjects />
<%
  String testVariable = (String)renderRequest.getAttribute("test_renderRequest_setAttribute");
%>

<b><%= testVariable %></b>
<script type="text/javascript">
  $(document).ready(function() {
    myNamespace.control.init();
  });
</script>

testVariable的打印在这里工作,打印出“TestValue”作为唯一的输出。

我的control.js:

var myNamespace = myNamespace || {};
myNamespace.control = (function($, OL, ns) {
  "use strict";
  function init() {
    //How on earth do I access the variable here?
    console.log(testVariable); // error: testVariable not defined
    console.log(renderRequest.getAttribute("test_renderRequest_setAttribute")); // error: renderRequest not defined
  }      
  // public interface
  return {
    init : init,
  };
}());

我在想的是,我显然对这些变量的范围和renderRequest对象的工作方式感到很遗憾。我确信解决方案很简单,但我似乎无法找到它。

1 个答案:

答案 0 :(得分:0)

您上面所做的不是创建一个名为testVariable的javascript变量。您只是将HTML变量testVariable的值作为粗体文本打印在HTML中,而不是打印到javascript中。

我认为你想要的是:

 <script type="text/javascript">
   var testVariable  = "<%= testVariable %>";
   $(document).ready(function() {
     myNamespace.control.init();
   });
 </script>

至于在javascript中使用* renderRequest.getAttribute(“test_renderRequest_setAttribute”)*,我对liferay知之甚少,所以我不知道是否在javascript方面通过某些javascript库以某种方式定义了renderRequest liferay,但直觉上我猜它只在Java方面定义。