[Tapestry4] Tapestry使用ognl无法取得Session的值?
lyo
2007-05-04
大家好:
我使用 Tapestry4.0,我想在登陆这个动作后,把用户信息保存到Session中,然后在页面取得这个session中的用户信息,但是在页面得到的visit是空的? 我得后台类: 代码 public abstract class Logon extends BasePage { public abstract Developer getUserInfo(); public abstract void setUserInfo(Developer dev); Developer dev=Service.getDev("123"); public void doLogon(IRequestCycle cycle){ if(null!=dev){ this.setUserInfo(dev); cycle.activate("Home"); } } Logon.page页面: 代码 <property name="userInfo" persist="session"/> 其中 userinfo是我想保存在session中的值. 我在home页面使用下面方法取得这个值: 代码 <span jwcid="@Insert" value="ognl:engine.visit">admin</span> 这样得到的值居然是 代码 {} ! 如果改成 代码 <span jwcid="@Insert" value="ognl:engine.visit.userInfo.devLogin">访客</span> 就会报 Nullpointer异常,说明visit对象中这个session的值不存在! 哪个步骤有问题呢? |
|
jimlaren
2007-05-04
你定义的持久只在这个页面持久,不能跨页面持久,你想要的持久在tapestry的概念是aso(Application state objects),具体用法参考http://tapestry.apache.org/tapestry4/UsersGuide/state.html#state.aso
|
|
lyo
2007-05-04
我想要这个对象的持久域是Session,你说的是application吧,你说得这个ASO的概念应该是application的scope。用户登陆后的信息应该保存到session的scope中吧?
我看过你给的那个章节,难道又要动 hivemind的配置文件了?! |
|
tapestry
2007-05-05
这个aso是持久对象的总称,并不是你理解的所有session都共享的application scope,它包括了session和application两个scope,
<contribution configuration-id="tapestry.state.ApplicationObjects"> <state-object name="registration-data" scope="session"> <create-instance class="org.example.registration.RegistrationData"/> </state-object> </contribution> 其中的scope定义了是session还是application。 配置hivemind是必须的呀,而且挺方便的,不知道为什么要抵触配置hivemind呢?!配置它你可以覆盖或者扩展tapestry的默认实现,可以配置friendly url,可以作为ioc容器等等,它可是tapestry的灵魂。 |
|
lyo
2007-05-05
? 你以前不是也抵触这个东西么? 我不想我的配置文件过于分散了,web.xml app.properties,log4j... ..etc,现在为了管理session又要弄出个 hivemind.xml需要管理,配置文件简直太多了! 但是我们有绝对不能使用 annotation(改动一下配置文件就能搞定的事情,如果把这些配置都放到代码中是不明智的),所以这个 annotation更是不会考虑用。 或者说为了使用 Tapestry4,我们已经维护了一个 app.properties这个文件了,我是不是也可以把这个 ASO 的配置写到 app.properties里面呢?这样所有关于 tapestry的配置都集中在 app.properties中管理,方便多了,也不用再弄出个 hivemind.xml来?!
|