Извините, что задаю такой простой вопрос, но я не смог найти четкого ответа на вопросы других:
У меня есть класс Foo
public class Foo {
private Integer id;
private String name;
private Bar bar;
// getters and setters
}
И ещекласс Bar
public class Bar {
private Integer id;
private String name;
private Set<Foo> foos;
// getters and setters
}
У меня есть ManagedBean
с ManagedProperty
, подобным этому:
public class FooBean {
@ManagedProperty(value = "{param.barId}"
private Integer barId;
private Bar bar;
private Foo foo;
public FooBean() {
}
@PostConstruct
public void initialize() {
SessionFactory factory = new Configuration().configure().buildSessionFactory();
if barId != null) {
foo = new Foo();
Session session = factory.openSession();
try {
session.beginTransaction();
bar = (Bar) session.load(Bar.class, barId);
foo.setBar(bar);
session.getTransaction().commit();
} catch (Exception ex) {
Transaction tx = session.getTransaction();
if (tx.isActive()) {
tx.rollback();
}
} finally {
session.close();
}
}
}
}
И в моем лицевом окне я пытаюсь показать данные таким образом:
<h:outputText value="#{fooBean.foo.bar.name}" />
Что не работает!но если я добавлю bar.getName()
к моему методу инициализации (после загрузки панели), он будет работать нормально!Зачем?А что является альтернативой лучшей практики?