2017-03-06 30 views
0

在我的戲框架項目我有一個傳遞到HTML頁面home.scala.html如何將Java Map <Long,Integer>傳遞給scala-play?

地圖變量傳遞在其他(工作)變量形式的Java的證實Java功能的地圖,在頁面的頂部:

@(workingVar1: String, workingVar2: Int, mapVar: Map[Long, Integer]) 

但開發者工具谷歌瀏覽器的亮點的JavaScript的這部分(嵌入home.scala.html的頭):

var myMap = @mapVar; 

與錯誤Uncaught SyntaxError: Unexpected token =

所以沒有JavaScript的作品。什麼是通過這張地圖的正確方法?

回答

0

的不雅但功能的解決方法如下:

在Java地圖帶來作爲字符串:

var stringMap = "@mapVar"; 

移除插入串不必要

stringMap = stringMap.replace(/{/g,''); 
    stringMap = stringMap.replace(/}/g,''); 
    stringMap = stringMap.replace(/ /g,''); 

大括號和空格將mapString分割爲,,並將每對分割爲=,隨時提取鍵和值。這些都需要增加一個JavaScript數組jsArr之前被解析到正確的數據類型:

var pairArray = mapString.split(","); 
    pairArray.forEach(function(pair) { 
     var values = pair.split("="); 
     var longString = values[0]; 
     var intString = values[1]; 
     var myLong = parseFloat(longString); 
     var myInt = parseInt(intString); 
     jsArr.myLong = myInt; 
} 

凡jsArr已經被定義。

0

您可以在Twirl Scala模板中使用Java/Scala變量,並且兩者都在服務器端執行。 現在在服務器端Twirl引擎將Java對象轉換爲某種東西(這可能不是您想要的),並以此形式傳遞給客戶端,然後執行此JavaScript。

您想確保客戶端將收到有效的JavaScript代碼。 要分配適當的值,您將不得不混合一些JSON庫,這將幫助您以正確的方式分配值。

例如,控制器端:

... 
Map<Long, Integer> map = new HashMap<>(); 
map.put(1L, 2); 
map.put(3L, 3); 
String yourMap = Json.stringify(Json.toJson(map)); 

現在,你想傳遞yourMap查看,然後將分配給使用@HtmlmyMap ,因爲我們希望它爲原料的內容片段:

​​

嘗試,讓我知道它是否有幫助。

+0

感謝您的回覆。 按照你的建議做,並在分配給@Html(mapVar)之後請求一個console.log(myMap)給了我 [object Object] – jMan

+0

所以它是正確的,對吧?現在它是帶有字段的JavaScript對象,這是您在地圖和相應值中的鍵。 – Rumid

相關問題