[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来?!
Global site tag (gtag.js) - Google Analytics