在登录Action中,我正在检查用户身份验证,如果验证通过,则将用户bean放入sessionMap中:

public String execute()
{
    if(userValid)
        sessionMap.put("userBean", userBean); //userBean retrieved from DB
}


现在,在着陆jsp上,当尝试检索会话项时:

<s:property value="#session.userBean.name" />


显然,这将返回一个Object类型,因为我以这种方式存储它,所以我该如何将等级将此类型键入UserBean类。

我原本希望在Google上获得针对此问题的解决方案,但由于这似乎是基本的实现,因此无处可寻。因此,请告诉我是否还有其他方法可以使用Struts2来实现此功能。

最佳答案

显然,如果对象不是该类的实例,则不能将其强制转换为UserBean类。在value属性中,您输入了字符串"#session.userBean.name"。 Struts将此字符串解析为OGNL表达式,如果它是一个有效的返回值的表达式,它将用该值替换它。返回的类型为Object,但是此类型由ValueStack实现确定。

然后,属性标签将此对象写入out。它使用toString()将对象转换为字符串。而且,如果您的对象实现此方法,则将写入此值。

看起来您的表达式返回了Object,其实例类型为String,因此它已经实现了此方法。

08-04 13:19