Liferay ポートレットに取り組んでいますが、いくつか問題があります。私が達成したいのは、Java クラスでページをレンダリングするときに作成されたデータにアクセスし、それを JavaScript に渡すことです。私の問題は、変数の範囲を理解していることだと思います。
これら2つから、view.jspファイルでJavaScriptに変数を渡す方法を見つけました。
liferayポートレットの作成 - Javaクラスからview.jspにデータを渡す方法は?
http://www.opensource-techblog.com/2012/08/creating-custom-liferay-mvc-portlet.html
私が今持っているもの:
Java サーブレット クラス:
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);
}
}
私のview.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 オブジェクトがどのように機能するかについて、明らかにかなり迷っているということです。解決策は非常に簡単だと確信していますが、見つけられないようです。