有朋友问到使用ejb3时关于jsf实现多行选择编辑记录的问题。其实按照jsf编程模型也只不过按部就班而已,没有什么好多说的。还是看实例好了。
一,创建表格,插入两条记录备用.
create table "spring"."dbo"."product"(
"productid" int not null,
"category" varchar(10) not null,
"name" varchar(80) null,
"descn" varchar(255) null,
constraint "PK__product__05D8E0BE" primary key ("productid")
)
insert into product (1,’图书’,’计算机应用’, ‘计算机工业出版社’)
insert into product (2,’图书’,’计算机组成原理’, ‘计算机工业出版社’)
二,ejb3的实现
1, 创建一个实体Product 没什么好多说的,只是多增加了一个boolean属性 editor,并且加了@Transient注释用以说明该属性不是持久化字段,增加该字段的目的也仅仅是为了判断哪些记录被选中了,以便处理选中了记录.
2, 创建会话bean
接口
package ejb;
import java.util.List;
public interface ProductDao {
public List getProducts() throws Exception;
public void saveProducts(List<entity.Product> products) throws Exception;
package ejb;
Bean类
import javax.ejb.*;
import java.util.List;
import java.util.Iterator;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import entity.Product;
@Stateful
@Remote(ProductDao.class)
public class ProductDaoBean {
@PersistenceContext
protected EntityManager em;
public List getProducts()throws Exception{
Query query = em.createQuery("from Product");
List list = query.getResultList();
em.clear();
return list;
}
public void saveProducts(List<Product> products){
for(Iterator<Product> it = products.iterator();it.hasNext();){
Product p = it.next();
em.merge(p);
}
}
}
3, jsf页面跟backing bean 前面两篇blog也说过这方面的类容,没什么好说的,也就不好了。
需要说明的是本例服务器采用jboss5.0,数据库用的MS SQL2000.完整实例下载。