2013-02-15 26 views
1

我們有一個單例,它保持applet的當前UI狀態。問題是:Applets中的單例

  1. 用戶在瀏覽器中打開小程序頁面,從下拉菜單中選擇一個值。
  2. 用戶在應用程序中瀏覽純HTML的另一個頁面。
  3. 用戶回到applet頁面,UI狀態是完好的,即他下拉選擇的值在那裏。這種下拉狀態來自Singleton,它可以保存applet的UI狀態。
  4. 用戶在應用程序中再次轉到純粹的HTML頁面。
  5. 用戶再次回到applet頁面,這次狀態丟失並重置爲默認佈局(下拉菜單包含默認值)。

我找到的原因是,保存UI狀態的Singleton在用戶第二次返回小程序時無法保持其狀態。所有的靜態變量都被重置爲默認值。

我發現小程序應該是無狀態的,因爲這link

它說:存放在小程序

值可以調用之間繼續存在,如果由類加載器緩存中獲取的內存不需要用於其他目的。但是你不能依賴那種行爲。一般來說,小程序應該是無狀態的。如果需要持久存儲,請使用瀏覽器cookie。

在這種情況下,我們如何爲Applets創建單例?我無法在瀏覽器cookie中保存整個UI狀態。

+1

有真正實現的嵌入式applet的一個單沒有有效的方法。 Otoh使用JWS啓動它自由浮動,並且可以使用SingleInstanceService來確保單個實例。 – 2013-02-16 01:31:04

+0

@AndrewThompson JWS中applet的實例化是否可以被瀏覽器中的JRE插件訪問?如果不是小程序如何訪問JWS對象? – 2015-10-28 13:24:58

+0

@cp。是的,如果它是嵌入的,否則如果它是自由浮動的。你爲什麼需要一個單身人士?你爲什麼需要一個小程序? – 2015-10-28 13:33:43

回答

1

我看到一些選項是:

  1. 發送一個HTTP請求到服務器保存當前狀態,使用Ajax調用,參考在一個小程序HTTP調用:how to (simply) generate POST http request from java to do the file upload

  2. 使用cookie保存狀態,以下是參考:can java applets (not signed) create/read cookies?

  3. 調用javascript函數以使用Jstorage將狀態保存在瀏覽器的本地存儲中,引用:http://www.jstorage.info/

使用Jstorage的是很簡單拿這個例子來看看存儲一個名爲反「康塔多」

<html><head> 
<script src="jquery.min.js"></script> 
<script src="jstorage.js"></script> 
<script> 
    function init() { 
     var contador = $.jStorage.get("contador"); 
     $('#you').html('contador=' + contador); 
     contador++; 
     $.jStorage.set("contador", contador); 
    } 
</script> 
</head> 
<body onload="init()"> 
    <div id="you"></div> 
</body> 
</html>