jsf,seam 中datatable的多选处理

由于jsf没有提供可用的datatable多选组件(页面上的复选框样式),所以在实际的应用中需要我们自己来处理这样的全选操作。一个比较间的做法就是改动值对象(或值对象的属性),添加一个Boolean类型的属性(checked),如下面的 Student 对象:
public class Test {

public String name;
public boolean checked;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
}

在jsp页面中的使用
<h:selectBooleanCheckbox value="#{student.checked}"/>
如下:
<h:dataTable var="student" value="#{studentBean.studentList}">
<h:column>
<f:facet name="header">
<h:outputText value="选择"/>
</f:facet>
<h:selectBooleanCheckbox value="#{student.checked>
<f:facet name="header">
<h:outputText value="name"/>
</f:facet>
<h:outputText value="#{student.name}"/>
</h:column>
</h:dataTable>

在studentBean中执行诸如 delete 等方法时循环判断 student对象的check属性:
public void deleteStudent(ActionEvent event){
for(int i=0;i<studentList.size();i++){
if (studentList.get(i).checked) {
studentManager.deleteStudent(studentList.get(i));
}
}
}
这种方法固然可用满足我们的需求,但同时我们也做了没没必要的操作(就是修改值对象 的属性,这不是一种好的方法。

今天看几个jboss seam 的例子,看到 dvdstore 的时候发现该示例演示的多选方案竟然与我用过的方案不谋而合,呵呵,其实也是一种很简单的实现。仍然以 Studen 对象来说明:
我可以在studentManger中添加一个Map<Student, Boolean> searchSelections 对象来完成页面上的多选功能:
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager entityManager;
@DataModel
private List<Student> studentList;
@Out(scope=ScopeType.SESSION, required=false)
Map<Student, Boolean> searchSelections;

//初始值
@Factory("studentList")
public void initStudents() {
studentList = entityManager
.createQuery("select stu from Student stu").getResultList();
searchSelections = new HashMap<Student, Boolean>();
}

页面显示代码:
<h:dataTable var="stu" value="#{studentList}">
<h:column>
<f:facet name="header">
<h:outputText value="select"/>
</f:facet>
<h:selectBooleanCheckbox value="#{searchSelections[stu]}"/>
<f:facet name="header">
<h:outputText value="name"/>
</f:facet>
<h:outputText value="#{stu.name}"/>
</h:column>
</h:datatable>
studentManager 的删除操作:
public void deleteStudent(){
for (int i = 0; i < studentList.size(); i++) {
if(searchSelections.get(studentList.get(i))){
entityManager.remove(studentList.get(i));
}
}
}
这样做岂不是很简单,也没有破坏实体bean本身。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值