| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Struts 2: проблема с множествами |
| Автор: MaxPayneC 19.6.2009, 11:38 | ||
Имеется код в JSP:
в соответствующем Action-классе есть метод getGraduate(), у возвращаемого им объекта - метод getEducations(), который возвращает Set<Education>. Проблема в том, что JSP считает множество пустым во всех случаях кроме одного: в методе execute action-класса был установлен брейкпоинт, и на graduate.getEducations().size() был сделан evaluate value. Тогда работает как должен. Кто-то сталкивался? |
| Автор: MisterCleric 19.6.2009, 11:45 | ||
должно быть так:
пробуй |
| Автор: MaxPayneC 19.6.2009, 11:52 |
| Не работает. <s:if test="!graduate.educations.isEmpty"> всегда false <s:if test="!graduate.getEducations().isEmpty()"> true, только если был сделан эвалуейт в экшн-классе |
| Автор: MisterCleric 19.6.2009, 12:12 | ||||
а я же написал
ладно. покажи свой Action и его меппинг в struts.xml |
| Автор: MaxPayneC 19.6.2009, 12:42 | ||
[xml] <action name="ShowGraduate" class="com.vc.graduates.actions.ShowGraduate"> <result name="input">/GraduateInfo/NotFound.jsp</result> <result name="error">/GraduateInfo/NotFound.jsp</result> <result>/GraduateInfo/ShowGraduate.jsp</result> </action> [/xml] У сета нет метода empty(), только isEmpty() |
| Автор: MisterCleric 19.6.2009, 13:01 | ||||||
вот мой работающий пример:
по-моему тут лишняя операция set. Там же ситуация какая. Все проперти достаются через рефлексию исключением префиксов "get", "set" а также "is" и приведением первой буквы в lowerCase ну и обратно с помощью такой движка как OJNL. Почитай доки как правильно надо с этим работать в кастом-тегах. default-interceptor-ref в студию! |
| Автор: MaxPayneC 19.6.2009, 13:08 | ||||||
А покажи джава-класс, плиз. Добавлено через 7 минут и 15 секунд
Если я правильно понял о чем ты, то вот фрагмент struts-default.xml
|
| Автор: MisterCleric 19.6.2009, 13:32 | ||||
со стэком вроде все-ок. Ну не понятно, что у тебя не так... |
| Автор: MaxPayneC 19.6.2009, 13:36 | ||
| Возможно, какая-то проблема с set? :/ На ум приходят тока шаманские действия, чтото засунуть туда и вынуть в экшн-классе, раз код работает только после эвалуейта. Добавлено через 4 минуты и 14 секунд Добавил в код строки:
Заработало ) |
| Автор: MisterCleric 19.6.2009, 13:54 | ||||
так подожди, может у тебя эта коллекция LazyLoad? Понятно, что ее не будет после того, как ты сделал так
|
| Автор: MaxPayneC 19.6.2009, 13:59 |
| В хибернейт-маппинге у education стоит lazy="false". Я это написал зря? Сорри за этот вопрос, но я чтото не очень понял из доков, за что отвечает этот параметр :( |
| Автор: MisterCleric 19.6.2009, 14:03 |
| давай дебажься и читай стэктрейс, что там пишеться кругом и как выглядит твой объект, после того, как ты вызвал commit(); |
| Автор: MaxPayneC 19.6.2009, 14:12 | ||||
В дебаггере переменная осталась, эвалуейт ее сделать можно, сет с education-ами тоже можно посмотреть из дебаггера. Добавлено через 2 минуты и 40 секунд В маппинге класса Graduate было указано
вставил lazy="false", заработало. Ты не мог бы подсказать, где можно почитать про lazy initialization, так чтобы было доступно написано? В официальных доках к хибернейту чтото не могу понять смысл этой штуки :( |
| Автор: MisterCleric 19.6.2009, 14:16 |
| ищи где-то по форуму я кому-то расписывал, как работать с этими LAZY |
| Автор: MaxPayneC 19.6.2009, 14:18 |
| Окей. Спасибо за помощь ) |