Как я могу поместить объект bean в sessionMap, а затем получить его свойства на странице jsp, используя тег свойства Struts 2

В логине Action Я проверяю аутентификацию пользователя, и если она проверена, я помещаю бин пользователя в 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.

2 ответа

Решение

Очевидно, вы не можете бросить его UserBean класс, если объект не является экземпляром этого класса. В атрибуте значения вы положили строку "#session.userBean.name", Struts анализирует эту строку для выражения OGNL, и если это допустимое выражение, которое возвращает значение, оно заменит его на это значение. Возвращаемый тип Object, но этот тип определяется ValueStack реализация.

Затем тег свойства записывает этот объект в out, Оно использует toString() преобразовать объект в строку. И если ваш объект реализует этот метод, то это значение будет записано.

Похоже, ваше выражение возвращает Object, который имеет тип экземпляра String, так что уже реализован этот метод.

Это прекрасно работает для меня...

<sp:property value="#session.usertype"/>
<sp:property value="#session.bean.loginID"/>

Это хорошо сработало для меня...

sessionMap.put("bean", loginBean);
sessionMap.put("usertype", loginBean.getUserType());

Я объявил что-то вроде этого....

Просто убедитесь, что в property пометить вас вы то же имя, которое вы использовали при установке бина в sessionMap....

Это, вероятно, должно работать....

Другие вопросы по тегам