- 浏览: 287749 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- jsf (16)
- 技术 (1)
- seam (27)
- jpa/hibernate (6)
- seam-对话 (3)
- 复用组件 (1)
- java基础 (18)
- JBOSS (1)
- Facelets (3)
- EL表达式 (2)
- 正则表达式 (1)
- sogi (2)
- 工具 (2)
- 设计模式/重构 (2)
- 项目管理-maven (5)
- EJB (1)
- ClassLoader (2)
- eclipse (1)
- jQuery (0)
- seam2源码分析 (0)
- osgi (0)
- TEST (0)
- 日志记录 (1)
- 批处理工作流 (0)
- 业务需求 (0)
- 语言 (2)
- 架构 (2)
- svn (1)
- sql (1)
- 异常处理 (1)
- mybatis (2)
- http (2)
- 代码可读性 (3)
- 配置化 (0)
- 错误恢复 (0)
- 状态查询 (1)
- 误操作恢复 (0)
- 工作安排 (0)
- 自动化 (0)
- 解耦 (1)
- 交流 (1)
- spring (6)
- 代码质量 (2)
- 方案 (1)
- 分布式 (1)
- mvc (2)
最新评论
-
luchuanbaker:
经过测试,实际上,mybatis并没有此问题,我也碰到了这样的 ...
mybatis 异常不友好 举例 -
huang882088:
jboss的war发布到tomcat里报这个错误怎么办?
classloader常见问题总结 -
yourenyouyu2008:
大型,可持续扩展的系统适合使用静态语言。大型系统中的部分地方可 ...
Nuxeo公司探秘:从Python迁移到Java -
yourenyouyu2008:
既然Nuxeo同时使用了Pytho ...
Nuxeo公司探秘:从Python迁移到Java -
panshunchang:
还有一种可能,真的缺这个jar包,在tomcat lib目录下 ...
classloader常见问题总结
基于seam的datatable全选解决方案
目前的table只支持单行操作和全部行操作,而不支持多选操作,比如每行号前有个复选框,用于批量删除。
通常做法
通常的做法是改写值对象,或者改写值对象的基类,在其中增加checked属性
------------------------------------------------
public abstract class BaseObject implements Serializable {
private boolean checked;
public void setChecked(boolean value) {
this.checked = value;
}
public boolean isChecked(){
return this.checked;
}
...
}
在页面上使用<h:selectBooleanCheckbox value="#{e.checked}" />
<h:dataTable var="e" value="#{typeallList.typeallModel }">
<f:facet name="header"><h:outputText value="#{text['typeall.typelist'] }"/>
</f:facet>
<h:column>
<f:facet name="header"><h:outputText value="#{text['list.checkall'] }"/></f:facet>
<h:selectBooleanCheckbox value="#{e.checked}" />
</h:column>
提交后循环全部行,取出选择的行
public String removeChecked(){
List tempList = typeallModel.getWrappedObject();
for (int i=0;i<tempList.size();i++){
OaTypeall obj=(OaTypeall)tempList.get(i);
if (obj.isChecked()) {
//删除obj
}
return null;
}
该方法的缺点是需要修改值对象,而添加的属性对值对象而言是没有意义的。这种方式破坏了对象的内聚性,把与该对象不相关的属性强添加到对象中。
新思路
尽量做到最大程度的通用性,不用修改值对象的类,用CheckeableList转换list,其中的对象用CheckedWrapped来包装,这样相当于给每行对象增加了checked属性,那样就可以在table的每行增加复选框了,提交后需要通过CheckeableList.getCheckedList(list)获取选种的记录。
页面效果
具体代码参照如下
CheckedWrapped包装类
package com.bhl.commons.web;
public class CheckedWrapped {
private Object data;
private boolean checked;
public CheckedWrapped(Object data,boolean checek){
this.data=data;
this.checked=checek;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
}
CheckeableList全选操作类
package com.bhl.commons.web;
import ………
@Name("checkeableList")
public class CheckeableList {
private boolean selected=false;
private String dataModel;
public static String eventType="select_all";
public String getDataModel() {
return dataModel;
}
public void setDataModel(String dataModel) {
this.dataModel = dataModel;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public static List transformList(List list){
if(list!=null&&list.size()>0){
int length=list.size();
for(int i=0;i<length;i++){
Object o=list.get(i);
CheckedWrapped wrap=new CheckedWrapped(o,false);
list.set(i, wrap);
}
}
return list;
}
public static List<Object> getCheckedList(List<CheckedWrapped> list){
List obList=new ArrayList();
if(list!=null&&list.size()>0){
for(CheckedWrapped wrap:list){
if(wrap.isChecked()){
obList.add(wrap.getData());
}
}
}
return obList;
}
public void selectAll(String dataName){
Object o=Contexts.lookupInStatefulContexts(dataName);
if(o!=null&&o instanceof DataModel){
DataModel dm=(DataModel)o;
List<CheckedWrapped> temList=(List<CheckedWrapped>)dm.getWrappedData();
if(temList!=null&&temList.size()>0){
for(CheckedWrapped wrap:temList){
if(selected){
wrap.setChecked(true);
}else{
wrap.setChecked(false);
}
}
}
}
}
//用于页面提交动作后的选择状态清除
@Observer("select_all")
public void clearSelected(){
selected=false;
}
}
页面及程序使用示例
页面
黑体加粗部分与全选有关
<a:outputPanel id="searchResults">
<div class="section">
<h:form>
<h:inputText value="#{hotelSearch.name}" style="width: 165px;"/>
<h:inputText value="#{hotelSearch.city}" style="width: 165px;"/>
<h:outputText value="No Hotels Found" />
<a:region>
<rich:spacer height="30" />
<rich:spacer height="30" />
<h:dataTable id="hotels" value="#{hotels}" columnClasses="col" var="wrap" >
<h:column>
<f:facet name="header">
<h:panelGroup>
<h:selectBooleanCheckbox name="checkname" value="#{checkeableList.selected}">
<a:support event="onclick" actionListener="#{checkeableList.selectAll('hotels')}" reRender="searchResults" />
</h:selectBooleanCheckbox>
<h:outputText value="selectAll"/>
</h:panelGroup>
</f:facet>
<h:selectBooleanCheckbox id="checkid" name="checkname" value="#{wrap.checked}"></h:selectBooleanCheckbox>
</h:column>
<h:column>
<f:facet name="header">Name</f:facet>
dd
</h:column>
<h:column>
<f:facet name="header">Address</f:facet
页面下面的代码显示不出来了,请参加附件。。。。
- 基于seam的datatable多选解决方案.rar (23.2 KB)
- 下载次数: 232
评论
在seam的example的dvdstore中有个多选的解决方法,用一个hashtable<object, boolean>的方式
@Out(scope=ScopeType.CONVERSATION, required=false)
Map<Product, Boolean> searchSelections;
<h:column>
<f:facet name="header">
<h:outputText value="#{messages.searchResultsAdd}" />
</f:facet>
<h:selectBooleanCheckbox value="#{searchSelections[product]}"/>
</h:column>
我现在用这种方式,兄弟可以参考一下!
发表评论
-
spring seam比较
2014-01-14 14:06 9621)获取框架中的bean spring通过静态方法中传递 ... -
Nuxeo公司探秘:从Python迁移到Java
2013-07-21 10:57 1091成立于2000年的Nuxeo公 ... -
自定义组件问题
2013-03-01 10:14 01)ios:dataTable组件中不加buttonPane ... -
seam中内嵌的事务回滚拦截器RollbackInterceptor
2012-12-28 15:17 2124seam中有两种事务管理方 ... -
使用JTA的事务同步机制实现分布式事务j的功能avax.transaction.Synchronization
2012-12-05 18:43 0分布式事务强大功能,但也会带来性能和管理上的压力(这是听专家门 ... -
seam中的test
2012-04-25 11:25 0seam中提供了一些非seam环境下的unit testing ... -
Hibernate的FlushMode 和seam对话中的FlushMode
2012-02-21 17:29 0hibernate提供了5种flushmode。 1) NE ... -
seam 中的注释分类
2012-02-14 11:08 0seam中注释主要分为2大类,seam组件对象构造阶段的注释和 ... -
seam2 热部署
2011-09-30 10:25 1206seam能很好地支持 页面(faceslet)、非ejb cl ... -
使用长对话的"manual" flush-mode ,多操作一次提交
2011-03-24 10:27 1549一次长对话访问中可以包括多个页面,每个页面只处理部分数据,但不 ... -
seam 属性配置与installed="false"的冲突
2011-03-08 15:09 1127问题 在测试和运行环境使用不同的事务配置,默认不需要指定事务 ... -
最简单的richfaces tree使用方式
2010-10-30 12:54 2368richfaces tree提供的示例都是一次全部构造出树,对 ... -
page scope介绍及用途
2010-06-02 00:13 6314jsf1.2只提供了3中作用域,application、ses ... -
seam框架中@Unwrap的使用示例
2009-09-07 10:07 16631) 把FacesContext当seam组件使用,可以直接 ... -
基于seam技术的中文网站
2009-09-05 16:28 1367基于seam的中文网站,欢迎大家提供实际的seam项目 ht ... -
在seam项目启动后执行数据库操作
2009-07-15 15:33 1798项目启动时执行些初始化数据操作,问题是事务不能提交,这样虽然方 ... -
基于seam-gen的热部署(hot deploy)相关问题
2009-07-06 12:04 1498使用seam-gen生成的seam项目是支持热部署的。 ... -
提升jsf/seam性能
2009-05-23 22:07 1467转载:http://www.jsfcentral.com/ar ... -
根据组件名字获取组件对象Component.getInstance(String name)
2009-05-05 22:02 4047Component.getInstance(String ... -
components.xml 配置seam组件
2009-04-29 12:21 2421components.xml 的配置采用反射机制来实现,组件类 ...
相关推荐
车标识别系统在智能交通系统中的作用与重要性 车标识别系统是智能交通系统(Intelligent ...该研究为智能交通领域中的车标识别技术提供了新的研究方向和实用解决方案,具有较高的应用价值和工程实践意义。
### 基于Seam2.1的最新力作《Seam Framework: Experience the Evolution of Java EE, 2nd Edition》全书知识点概览 #### 一、Seam框架简介 Seam框架是JBoss组织推出的一个开源项目,旨在简化企业级应用开发,通过...
Seam Carving是一种基于能量的图像缩放技术,由Ariel Shamir和Shai Avidan在2007年提出。它的核心思想是找出图像中的一条或多条“能量最低”的路径(seam),沿着这些路径删除或添加像素,从而实现图像的等比例或非...
1.版本:matlab2021a,包含仿真操作录像,操作录像使用...3.内容:基于Seam Carving算法的图像拉伸收缩算法matlab仿真 4.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。
基于Seam Carving算法的图像放缩pygame程序,
该项目是一个基于SEAM自监督等变注意力机制的弱监督语义分割设计源码,总共有24个文件,其中包括14个Python代码文件、6个文本描述文件、1个许可协议文件、1个Markdown文件、1个PNG图片文件和1个npy数据文件。...
无论是从核心概念还是实际应用的角度来看,Seam都为开发者提供了一种高效、灵活的解决方案。通过深入学习本书中的内容,开发者能够更好地掌握Seam框架的关键技术和最佳实践,从而提高应用程序的质量和性能。
Seam Carving实现图像的重定位——计算机图像与图形技术大作业 其中,实验部分包含以下的实验及结果: 图像剪裁:将原图像剪裁为指定尺寸,并保持主体内容完整且比例正常。 2.图像重定向(Retarget):将原图像...
这个"matlab_(含教程)基于Seam Carving算法的图像拉伸收缩算法matlab仿真"压缩包文件很可能包含了MATLAB代码示例、图像输入和输出,以及详细的教程资料。通过学习和运行这些代码,你可以深入理解Seam Carving算法的...
Seam Carving是一种图像处理技术,常用于动态调整图像大小,尤其在保持视觉质量的同时减小或增大图像的尺寸。这种技术的核心理念是通过找出并移除(或添加)图像中的“能量最小”像素行(或列),这些行(或列)被...
### 基于Seam Carving的图像调整技术详解 #### 一、Seam Carving算法原理 Seam Carving算法是由Shai Avidan和Ariel Shamir于2007年提出的一种内容感知的图像缩放算法。相较于传统的图像缩放方法,Seam Carving算法...
SeamCarving是一种图像处理技术,它通过删除或添加垂直或水平的像素“接缝”来改变图像的尺寸,而尽量保持视觉质量。在Matlab中实现SeamCarving算法,可以为图像的无损缩放提供一种有效的方法。下面我们将深入探讨这...
首先,Seam框架是一个基于Java EE的全栈框架,它集成了JSF、EJB、CDI和JPA等多个技术,提供了一种声明式编程模型,简化了企业级应用的开发。在实现省市区联动选择时,Seam框架可以有效地管理组件之间的交互和状态,...
课程设计基于C++实现Seam Carving图像缩放算法源码+实验报告.zip课程设计基于C++实现Seam Carving图像缩放算法源码+实验报告.zip课程设计基于C++实现Seam Carving图像缩放算法源码+实验报告.zip课程设计基于C++实现...
Seam-gen 是一款用于快速生成基于 Seam 框架的基础项目结构的工具,它通过简单的命令行交互式过程,帮助开发者构建项目的雏形,并且能够根据数据库信息自动生成管理数据库的 CRUD(Create, Read, Update, Delete)...
Seam Security是针对Java Web应用程序的安全框架,它是JBoss Seam项目的一部分,提供了全面的安全解决方案,包括身份验证、授权和身份管理等功能。Seam Security以易于配置和使用为特点,允许开发者快速设置应用程序...
图形学大作业-现了基于SeamCarving算法,用于内容敏感的图形的裁剪与放大 同时支持对指定对象的保护与删除+源代码+文档说 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都...