Передача управляемого EJB-компонента JSF2 в EJB или помещение того, что требуется, в объект передачи
В настоящее время я звоню EJB 3
Фасоль сеанса от JSF 2
, Однако я не уверен, должен ли я передавать управляемые JSF-бины в EJB?
Предполагая, что в форме (и, следовательно, в компоненте поддержки) было все, что мне нужно для сохранения на уровне EJB, я должен клонировать все атрибуты вручную в объект переноса или есть лучший способ сделать это?
Бэк хотя POJO
сильно аннотируется тегами жизненного цикла JSF (такими как @ManagedBean
) и проживает в Web project
в то время как EJB проживают отдельно в EJB project
,
2 ответа
Звучит так, как будто вы тесно связали модель с контроллером, как показано в большинстве основных руководств по JSF. Вы должны отделить модель от контроллера в своем собственном классе. Поскольку вы используете EJB, велика вероятность того, что вы также используете JPA (как иначе EJB будут действительно полезны для сохранения?), Вы можете просто использовать существующий JPA @Entity
класс как модель.
Например
@Entity
public class Product {
@Id
private Long id;
private String name;
private String description;
private Category category;
// ...
}
с
@ManagedBean
@ViewScoped
public class ProductController {
private Product product;
@EJB
private ProductService service;
public void save() {
service.save(product);
}
// ...
}
который должен использоваться как
<h:form>
<h:inputText value="#{productController.product.name}" />
<h:inputTextarea value="#{productController.product.description}" />
<h:selectOneMenu value="#{productController.product.category}">
<f:selectItems value="#{applicationData.categories}" />
</h:selectOneMenu>
<h:commandButton value="Save" action="#{productController.save}" />
</h:form>
Я пытался сделать то же самое с CDI и основной разницей (исключая использование @Named
вместо @ManagedBean
было то, что я должен был инициализировать свой транспортный объект в классе Controller.
Так что вместо:
private Product product;
Я должен был использовать:
private Product product = new Product();
Может быть, это кому-то поможет:)