2013-11-02 6 views
1

В моем проекте у меня есть абстрактный абстрактный класс @Entity. У меня есть несколько классов @Entity, которые расширяют EVENT, например LOGIN, CHANGE_NAME, SEND_TEXT. У каждого класса есть свои собственные поля. У входа есть поля из EVENT plus ip, у CHANGE_NAME есть поле со старым именем пользователя, SEND_TEXT имеет поле с самим текстом, плюс кто вы отправляете текст.
Теперь - у меня есть @Entity с отношением @OneToMany к классу Event.jsf inheritance abstract class

@OneToMany(mappedBy = "wycenioneAuta", cascade = {CascadeType.DETACH, CascadeType.MERGE, 
      CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.EAGER) 
    @Access(AccessType.FIELD) 
    private Set<Event> event= new LinkedHashSet<>(); 

В нем хранится все Событие, выполняемое на этом @Entity. Теперь я описываю свою проблему:
Я хочу отобразить историю событий. Я попытался

<ui:repeat value="class.event var="e"> 
#{e.id}, 
#{e.date}, 
#{e.user.name} 
</ui:repeat> 


, но я могу только поле отображения от конкретного класса, всякий раз, когда я пытаюсь получить данные от конкретного события, мое приложение давки, «Couse F.E. У Change_name нет поля 'ip' или у Send_Text нет поля oldUsername. Есть ли способ отобразить эти данные? Когда я отлаживаю свое приложение, набор событий выглядит хорошо - каждое событие имеет правильное заполнение поля.

Заранее благодарим за помощь.

ответ

1

Так что мне нужно было что-то сделать, вот как я решил эту проблему: Я сделал несколько методов @Transient в конкретном классе. Они выглядели так:

@Transient 
public boolean isChangeName(){ 
    return (this instanceof ChangeName); 
} 

и в моей странице:

<ui:repeat value="#{entry.eventList}" var="e"> 
    #{e.isChangeName? e.oldName: ""} 
    #{e.isSendText? e.text: ""} 
</ui:repeat> 

это работает точно так же, как я хотел - показывает список событий с деталями. Надеюсь, кому-то это поможет :)