小程序中的单例

时间:2013-02-15 12:11:42

标签: java applet singleton

我们有一个Singleton,它维护applet的当前UI状态。问题是:

  1. 用户在浏览器中打开小程序页面,在下拉列表中选择一个值。
  2. 用户浏览应用程序中的另一个纯HTML页面。
  3. 用户返回applet页面,UI状态完好无损,即他在下拉列表中选择的值就在那里。这种下拉状态来自Singleton,它可以保存applets的UI状态。
  4. 用户再次转到应用程序中的纯HTML页面。
  5. 用户再次回到applet页面,这次状态丢失并重置为默认布局(下拉列表包含默认值)。
  6. 我发现的原因是,当用户第二次返回applet时,保存UI状态的Singleton无法保持其状态。所有静态变量都将重置为其默认值。

    我发现applet应该是无状态的link

    其中说:

      

    如果由类加载器缓存获取的内存不是出于其他目的而需要,则存储在applet中的值可能会在调用之间保留。但你不能依赖这种行为。通常,applet应该是无状态的。如果需要持久存储,请使用浏览器cookie。

    在这种情况下,我们如何为Applet创建单身人士?我无法在浏览器cookie中保存整个UI状态。

1 个答案:

答案 0 :(得分:1)

我看到了一些选项:

  1. 向服务器发送http请求以保存当前状态,使用ajax调用,在applet中引用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/

  4. 使用Jstorage非常简单看看这个存储名为“contador”的计数器的例子

    <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>