Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Вопрос по velocity


Автор: greef 14.1.2008, 16:40
Есть вопрос по velocity

загрузузил всех юзеров и их друзей
Если просто выводить список ${q.Friend}, то выводиться список
объектов.

org.gritsik.model.Friend@1e7c609[ id=2 Friend=Sidorov]
org.gritsik.model.Friend@17a7adf[ id=6 Friend=Kozev1]
org.gritsik.model.Friend@11bda67[ id=1 Friend=Ivanov] 


Но если пробую взять поле ${q.Friends.Friend}, то
Код

${q.Friends.Friend} is not a valid reference.


Я так понимаю, что идет такая очередность command.[private Set
Friend].[поле объекта Friend]. Но почему тогда ошибка?

Вот модель и маппинг
Код

public class User extends BaseObject{
    private Long id;
    private String name;
    private String location;
    private String sex;
    private String birthdate;
    private Set friends;

public class Friend extends BaseObject{
    private Long id;
    private String friend;



Маппинг
 
Код

   <class name="org.gritsik.model.User" table="User">
        <id name="id" column="id" unsaved-value="0">
            <generator class="native"/>
        </id>
        <property name="name" column="name" not-null="true"/>
        <property name="location" column="location" not-null="true"/>
        <property name="sex" column="sex" not-null="true"/>
        <property name="birthdate" column="birthdate" not-null="true"/>
        <set name="friends" inverse="true" lazy="false">
            <key column="user_id"/>
            <one-to-many class="org.gritsik.model.Friend"/>
        </set>
......................


Заранее спасибо!

Автор: Tony 14.1.2008, 16:43
${q.Friends[1].friend}. Надo типа так. Но jeто не прокатит т.к. friends Set а не List.

Автор: Kangaroo 14.1.2008, 16:55
Цитата(greef @  14.1.2008,  15:40 Найти цитируемый пост)
Я так понимаю, что идет такая очередность command.[private Set
Friend].[поле объекта Friend].

в Велосити так нельзя. Стандартными средствами можно только foreach. Но есть вроде VelocityTools, которые упрощают работу с коллекциями - посмотрите на их сайте.

Автор: greef 14.1.2008, 17:01
Спасибо, буду смотреть.

Автор: greef 15.1.2008, 01:53
Цитата(Tony @ 14.1.2008,  16:43)
${q.Friends[1].friends}. Надo типа так. Но jeто не прокатит т.к. friends Set а не List.

Ради интереса изменил Set на List:

Код

public class User extends BaseObject{
    private Long id;
    private String name;
    private String location;
    private String sex;
    private String birthdate;
    private List friends;
...........................


Ну и маппинг

Код

.........
        <bag name="friends" inverse="true" lazy="false">
            <key column="user_id"/>
            <one-to-many class="org.gritsik.model.Friend"/>
        </bag>
.........


И test.vm
Код

.......
    #foreach($q in $users)
        ${q.friends[1].friends}
    #end
........


Выдает ошибку:

Код

00:46:08,750: ERROR - CommonsLoggingLogSystem.logVelocityMessage(43) | ResourceManager.getResource() parse exception: org.apache.velocity.exception.ParseErrorException: Encountered "[1].friends}\r\n    " at line 38, column 20.
Was expecting one of:
    "}" ...
    <DOT> ...
    "(" ...

Автор: intr 15.1.2008, 04:57
Цитата(Tony @ 14.1.2008,  21:43)
${q.Friends[1].friends}. Надo типа так. Но jeто не прокатит т.к. friends Set а не List.

для Set будет нечто подобное ${q.Friends.get(1)}. Тоесть по ключу получаем значение из Set!

Добавлено через 2 минуты и 59 секунд
Цитата(greef @ 15.1.2008,  06:53)
Код

.......
    #foreach($q in $users)
        ${q.friends[1].friends}
    #end
........

так правильнее
Код

.......
    #foreach($q in $users)
        ${q.friend}
    #end
........

только надо не забывать что должен быть геттер для поля friend у объекта Friend

p/s
Надо больше читать манов там все в примерах показано!

Автор: greef 15.1.2008, 15:03
Решением в данном вопросе - 
 
           #foreach($user in $users)
                #foreach($f in $user.friends)
                    ${f.friend}<br>
                #end
            #end

Где
Код

public class User extends BaseObject{
    private Long id;
    private String name;
    private String location;
    private String sex;
    private String birthdate;
    private Set friends;
.....


и
Код

.....
        <set name="friends" inverse="true" cascade="all" lazy="false">
            <key column="user_id"/>
            <one-to-many class="org.gritsik.model.Friend"/>
        </set>
.....


P.S. Всем спасибо за помощь smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)