0

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 オブジェクトがどのように機能するかについて、明らかにかなり迷っているということです。解決策は非常に簡単だと確信していますが、見つけられないようです。

4

1 に答える 1

0

上記で行っていることは、testVariable という名前の JavaScript 変数を作成することではありません。HTMLのJava変数testVariableの値を太字のテキストとして出力しているだけで、JavaScriptには出力していません。

あなたが望むのは次のとおりだと思います:

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

javascript で *renderRequest.getAttribute("test_renderRequest_setAttribute")* を使用することに関しては、私は liferay についてあまり知らないので、liferay の一部である javascript ライブラリを介して javascript 側で renderRequest が何らかの形で定義されているかどうかはわかりませんが、直感的には、Java 側でのみ定義されていると思います。

于 2013-10-04T18:36:08.320 に答える