由于Wicket通过序列化我的页面中的组件自动管理会话状态,我想知道,在哪个级别我应该附加我的状态数据.更具体地说,似乎我遇到的错误是由WebApplication会话之间共享的对象引起的.
Page实例吗?我猜,第三个要点取决于对象的身份.Wicket使用什么来确定equals()(例如,它是否正在使用a Map)?
我附加到应用程序对象的数据是我在许多页面中需要的状态,因此我没有将它附加到页面对象.这是在Wicket中做到这一点的正确方法吗?
Application物体的关键.您可以随时通过Application子类存储和访问应用程序范围的数据(通常是配置).Session对象存储在对象中更为合适.(一个例子可能是用户登录,它肯定属于会话,可以被任何页面使用.)当然,你可以在页面之间传递数据,但这不是一个很好的策略.截止点将是您的决定:如果数据在两个页面之间共享,您可能希望将其从一个页面传递到另一个页面,如果有20个页面,您绝对不会想要.Session对象中存储数据可能会派上用场的原因.澄清一下:共享状态的页数表示数据的放置位置,但真正重要的是您希望项目共享数据的耦合程度:
如果您在页面之间传递数据作为参数,它们将形成紧密耦合的组.根据页面所代表的内容,这可能是可取的.对此的一个示例可以是类似向导的页面序列,每个页面都知道前后页面是什么.
但是在登录示例中我们看到相反的情况:填充登录名的组件(可能是某种登录表单)必须不知道其他组件将使用它.因此,逻辑解决方案是将登录名存储在会话中,并让每个组件在需要时获取它.
有多种方法可以获取当前Session对象.查看课程文档以了解具体方法.
总结那里的信息:Wicket通过不提供类似通用setProperty的方法来阻止类型不安全的会话属性.相反,您应该Session更充分地扩展或大多数项目,WebSession并将类型安全属性放在该类中.然后newSession,您可以覆盖您的应用程序类.
| 归档时间: |
|
| 查看次数: |
4443 次 |
| 最近记录: |