我正在研究 Liferay portlet 并且遇到了一些问题。我想要实现的是访问在 java 类中呈现页面时创建的一些数据并将其传递给我的 JavaScript。我认为我的问题是我对变量范围的理解。
我已经从这两个中弄清楚了如何在 view.jsp 文件中将变量传递给 JavaScript:
创建 liferay portlet - 如何将数据从 Java 类传递给 view.jsp?
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 对象的工作方式非常迷茫。我确定解决方案非常简单,但我似乎找不到它。