使用jQuery和servlet保持视图状态

时间:2016-07-22 05:56:54

标签: jquery html jsp servlets

我正在开发一个Web应用程序,它包含大量包含模块的div(JSP片段)。该站点使用普通的JSP / servlets / jQuery编写。在理想情况下,用户仅使用按钮在站点中导航,并且ajax将模块加载到相应的div中。但是,如果用户重新加载站点,或者获得服务器端验证错误+重定向,则视图将进入默认模式,并且我必须重建他上次看到的状态。

由于模块数量较少,我已经引入了变量来跟踪每个div的状态,这很好,但是当它达到更高的复杂度时,它开始变得非常痛苦,它会去更糟糕的是,加上维护和调试的噩梦。

例如:有<div id="one"><div id="two"><div id="tree">。如果一个是活动的,则隐藏两个和三个。如果两个是活动的,一个是暗淡的,三个是隐藏的。如果三个处于活动状态,则一个和两个处于活动状态,但不会显示与处于活动状态时相同的内容。即使这个例子也很复杂,甚至不计算每个输入变化(搜索,过滤等)都可以触发这些过渡。

是否有任何传统方式或某种技巧可以使这更容易?

1 个答案:

答案 0 :(得分:1)

我会用一种简单的方法来保存状态:

<div id="1" class="persist" state='visisble'></div>
<div id="2" class="persist" state='visisble'></div>
<div id="3" class="persist" state='hidden'>
    <input type="text" class="persist" id="i1" />
</div>

使用JQuery,我会用persist类选择每个div。创建一个JSON(或其他),如:

{
    persistance [
       { 'id':1, 'state':'visible' },
       { 'id':2, 'state':'visible' },
       { 'id':3, 'state':'hidden', 
          "fields":[ { 'id':'i1', value:'foo' }] 
       }
}

它将包含您要保留的所有数据(希望您在此处有命名约定;))。对于每个div,使用persistant类获取输入/ ...以存储值(或其他字段名称,具体取决于标记)

然后将其发送到服务器以保留它(或用它做你想做的事)。要恢复状态,您可以使用ID将所有内容设置回以前。对于每个div id,设置值receive和每个字段。

您使用beforeunload页面事件运行它(不确定它是否正常工作;))以保存它。要恢复它,您可以使用与Ajax和Jquery相同的方式,也可以直接在JSP中使用。

对于代码示例,您需要向我提供更多信息(模块类,所需数据类型,......)