1

我们有一个 Singleton 来维护小程序的当前 UI 状态。问题是:

  1. 用户在浏览器中打开小程序页面,在下拉列表中选择一个值。
  2. 用户在应用程序中浏览另一个纯 HTML 页面。
  3. 用户回到小程序页面,UI 状态完好无损,即他在下拉菜单中选择的值在那里。这种下拉状态来自一个Singleton,它保存了applet UI 状态。
  4. 用户再次转到应用程序中的纯 HTML 页面。
  5. 用户再次回到小程序页面,这次状态丢失并重置为默认布局(下拉菜单包含默认值)。

我发现的原因是,当用户第二次返回小程序时,保存 UI 状态的 Singleton 无法保持其状态。所有静态变量都重置为其默认值。

我发现小程序应该是无状态的,因为这个链接

其中说:

如果类加载器缓存获取的内存不需要用于其他目的,则存储在小程序中的值可以在调用之间保持不变。但是你不能依赖这种行为。一般来说,小程序应该是无状态的。如果需要持久存储,请使用浏览器 cookie。

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

4

1 回答 1

1

我看到了一些选项:

  1. 向服务器发送 http 请求以保存当前状态,使用 ajax 调用,小程序中 http 调用的参考:如何(简单地)从 java 生成 POST http 请求以进行文件上传

  2. 使用 cookie 保存状态,这里是参考:java 小程序(未签名)可以创建/读取 cookie 吗?

  3. 调用 javascript 函数以使用 Jstorage 将状态保存在浏览器的本地存储中,参考: http: //www.jstorage.info/

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>
于 2013-02-16T01:50:59.293 回答