我使用Apache Tapestry作为Web应用程序框架。

我的Java代码中有变量。页面加载后,我需要在javascript中此变量的值。

例如java类:

@Import(library = "RoomManagement.js")
public final class RoomManagement{
  @Property
  private long contactId;
}


和RoomManagement.js中的js:

window.onload = function(){
    alert(contactId);
}


如何将其直接传递给javascript?

我无法像模板一样将值传递给js,因为它是.js文件而不是.tml。

我可以在页面上添加不可见标签,将值写入此标签并从js读取。
但是你知道另一种方式吗?

最佳答案

您将需要使用JavaScriptSupport服务。

您的Java文件:

@Import(library = "RoomManagement.js")
public final class RoomManagement{

  @Inject
  private JavaScriptSupport javascriptSupport;

  @Property
  private long contactId;

  @AfterRender
  private void setup() {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("contactId", contactId);
    javascriptSupport.addInitializerCall("RoomManagement",jsonObject);
  }
}


您的RoomManagement.js

Tapestry.Initializer.RoomManagement = function (parameters) {
    //do whatever you need here
    alert('Your contactId: ' + parameters.contactId);
};

10-08 01:37