传统方法
view >> controller >> service >> domain
可以翻译成
/**
* view
*/
<h:commandButton value="Deposit" action="#{accountController.removeAccount(account)}"/>
/**
* controller
*/
@Name("accountController")
public class AccountController implements Serializable {
/**
* Usually a plain POJO or EJB
*/
private @In AccountService accountService;
public void removeAccount(Account account) {
accountService.removeAccount(account);
}
}
/**
* service
*/
@Name("accountService")
public class AccountServiceImpl implements AccountService {
private @In EntityManager entityManager;
public void removeAccount(Account account) {
entityManager.remove(account);
}
}
它需要操作JSF组件
你也可以使用
view >> service >> domain
基本上与上面所示的方法相同
但没有控制器
view >> domain
按以下方式注册您的EntityHome
<framework:entity-home name="accountHome" entity-class="br.com.ar.seam.Account"/>
现在您可以创建
化名
使用工厂元素
<factory name="account" value="#{accountHome.instance}"/>
/**
* view
*
* Notice account will be evaluated as accountHome.instance
*/
<h:commandButton value="Deposit" action="#{account.remove}"/>
没别的了。请记住,在使用EntityHome(JPA)或HibernateEntityHome(Hibernate)时,通常需要重写一些方法来提高性能,如下所示
@Name("accountHome")
public class AccountHome extends EntityHome<Account> {
/**
* Override any method you want right here
*/
}
关于业务逻辑???您可以将其放在服务层中,也可以使用域驱动的设计方法。看到了吗
here
测试:使用接缝捆绑测试组件。看看接缝
示例
目录以获得如何在不部署的情况下执行测试的概述
如果可能,使用seam gen生成项目。Seam in Action手册第2章可以很好地说明如何启动Seam gen功能。
仔细阅读
. 任何seam gen生成的项目
JSF组件:看一下
here
我认为查询最好存储在外部文件中,因为
如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<query name="GIFT_CARDS_WITH_BUYER">
<![CDATA[
from
GiftCard c
left join fetch
c.buyer
where
c.recipientNotificationRequested = 1
]]>
</query>
<query name="GIFT_CARDS_WITHOUT_NO_RELATIONSHIP">
<![CDATA[
from
GiftCard
]]>
</query>
</hibernate-mapping>
不错,别这样
JBoss Seam:
Agile RIA Development Framework