`
seattle2881
  • 浏览: 32789 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

基于Struts2的分页复选框记忆选择

 
阅读更多

之前项目中一直没有用到分页checkBox需要记住兄弟页面选择的需求,分页一直都是页面的整体刷新,然后在后台根据传来的参数,重新从数据库读取数据展示到前台,只是简单的分页展示,功能简单。

而最近一个需求,要求不止是分页展示,还要记住兄弟页面的checkbox的选择情况,并最终将所有选择信息传到后台生成记录。

因为整个模块代码分布比较零散,不方便将代码粘贴上来。就简单记录下自己的思路吧。

1.首先,每个分页的选择记录需要有一个容器来存储,开始我是用页面传值来记录每一个选择id,后来发现添加id容易,但是取消之前选择过的id麻烦,最终选择用SESSION来存储一个HashSet集合,所有的id也都放在这个集合里,因为是set集合,所以即使重复添加,也没有重复的id值,去除id也很简单,总之,类似于这样的对数据的处理,放在后台处理肯定比在前端方便多了。

2.必须保证这个set集合里的数据是正确的,也是最新的。保持正确的话,就需要适时对set里的数据进行更新,及清空,防止里面有脏数据。目前我的做法,是在跳转到当前分页模块的时候,就对SESSION中的set集合进行一次清空,防止上一次操作遗留的set数据成为脏数据,同时,在完成一次记录的添加后,set集合中的数据也就不需要了,也要进行一次清空。需要注意的一点是,翻页的时候,不需要清空哦,呵呵呵,不然做啥都是枉然啦。至于数据的最新,因为是分页记忆选择,我选择在每次点击分页按钮的时候,也就是对后台发送分页请求的时候,在发送分页请求前,先执行一次ajax请求,将当前分页中checkbox已经选中的,和没有选中的id都传到后台,在后台先将已经选中的数据进行一次添加,再将没有选中的id进行一次移除,并且在最后请求返回的时候,获取session中set集合的个数,也就是选择id的最新个数,以便传到前台,通过js控制id的选择数量。当然,在最后完成选择,进行添加记录请求的时候,因为当前的操作不需要点击分页了,用户已经完成了最终选择,那么在提交添加记录请求前,同样的也要完成一次ajax请求,对当前分页的checkbox进行一次添加和移除,并且返回最终所有选择的id数量。如果数量符合需求的要求,则进行添加记录请求。

3.另外一点就是客户的体验,当你跳转到之前选择的页面时,要保证页面中你选择过的复选中是选中状态,这样才是正确的用户体验。我的做法是将session中的set集合遍历出来,将set中的id值放在隐藏的input标签中,然后将隐藏的input标签用jquery进行遍历,获取到当前标签的value值,也就是选中的id值,通过id值利用jquery选择器定位到对应的分页复选框,将当前复选框设为选中状态。

至此,大致的思路步骤就到此。

附上ajax请求到后台的struts2 Action的代码

/*

 * 作者		liteng
 * 开发环境	WindowsXp MyEclipse6.5 JDK1.6.0_22
 * 开发日期	2011-10-26
 */

package com.tydic.mpms.use.choosechild;

import java.util.HashSet;
import java.util.Set;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.json.annotations.JSON;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import framework.base.action.BaseAction;
import framework.base.constant.SpringScope;
import framework.utils.StringTools;


@Controller("Famous_ChooseAction")
@Scope(SpringScope.PROTOTYPE)
@Results( {
	@Result(name="json",params = { "contentType", "text/plain" },type="json")
    })
public class FamousChooseAction extends BaseAction {
	/**
	 * @author liteng
	 */
	private static final long serialVersionUID = -8789701624699257485L;

	//最终选择的七个id字符串 添加的时候判断是否超过7个 如果超过7个 不能添加
	private int 			   idNum;

	//选中的所有id字符串 添加避免重复
	private String 			   checkIds;   
	
	//取消的所有id字符串 有则取消 无则不操作
	private String             cancelIds;
	
	@Override
	public String execute() throws Exception {
		this.log.debug("FamousChooseAction start()");
		//首先获取最新的id数量
		this.getNewIdNum();
		
		if(StringTools.isBlank(checkIds)){
			log.debug("==========================checkIds is null");
		}else{
			String[] checkIdsArray = checkIds.split(" ");
			for(String id : checkIdsArray){
				this.setIdToSessionSet(id);
			}
		}
		if(StringTools.isBlank(cancelIds)){
			log.debug("===========================cancelIds is null");
		}else{
			String[] cancelIdsArray = cancelIds.split(" ");
			for(String id : cancelIdsArray){
				this.removeIdFromSessionSet(id);
			}
		}
		
		//最后再获取最新的id数量
		this.getNewIdNum();
		
		log.debug("选中的明星儿时图片数量为"+idNum);
		this.log.debug("FamousChooseAction End()");
		return "json";
	}

	//将id插入到set集合中
	@SuppressWarnings({ "unchecked" })
	private void setIdToSessionSet(String checkId){
		if(this.session.getAttribute("FAMOUSIDSET") == null){
			Set<String> famousIdSet = new HashSet<String>();
			famousIdSet.add(checkId);
			this.session.setAttribute("FAMOUSIDSET", famousIdSet);
		}else{
			Set<String> famousIdSet = (Set<String>) this.session.getAttribute("FAMOUSIDSET");
			famousIdSet.add(checkId);
			this.session.setAttribute("FAMOUSIDSET", famousIdSet);
		}
	}
	//将id移出set集合中
	@SuppressWarnings({ "unchecked" })
	private void removeIdFromSessionSet(String cancelId){
		if(this.session.getAttribute("FAMOUSIDSET") != null){
			Set<String> famousIdSet = (Set<String>) this.session.getAttribute("FAMOUSIDSET");
			famousIdSet.remove(cancelId);
			this.session.setAttribute("FAMOUSIDSET", famousIdSet);
		}
	}
	//获取当前选中的id数量
	@SuppressWarnings("unchecked")
	private void getNewIdNum(){
		if(this.session.getAttribute("FAMOUSIDSET") == null){
			idNum = 0;
		}else{
			Set<String> famousIdSet = (Set<String>)this.session.getAttribute("FAMOUSIDSET");
			idNum = famousIdSet.size();
		}
	}
	
	@JSON(serialize=false)
	public String getCheckIds() {
		return checkIds;
	}

	public void setCheckIds(String checkIds) {
		this.checkIds = checkIds;
	}
	
	
	@JSON(serialize=false)
	public String getCancelIds() {
		return cancelIds;
	}

	public void setCancelIds(String cancelIds) {
		this.cancelIds = cancelIds;
	}
	
	@JSON(serialize=true)
	public int getIdNum() {
		return idNum;
	}

	public void setIdNum(int idNum) {
		this.idNum = idNum;
	}


	
	
	

	
	
}
 
分享到:
评论

相关推荐

    struts2实现分页

    ##### 4.4 复选框分页应用 在处理复选框时,可以利用 `&lt;s:bean&gt;` 控制循环范围,如下所示: ```xml &lt;s:bean name="org.apache.struts2.util.Counter" id="counter"&gt; 選 &nbsp; ``` - **...

    struts2+hibernate学生信息管理系统

    在每条记录前添加复选框,用户可以选择多条记录,然后提交到后台。Struts2会收集这些选择,通过Hibernate的批处理操作一次性删除所选的多个学生信息,提高了数据处理效率。 在实际应用中,系统的性能优化也是关键。...

    Struts开发实例.rar

     7、Struts复选框的实现;  8、Struts下拉框的实现;  9、如何实现Struts 数据库应用程序;  10、如何在Struts 数据库应用程序中实现分页显示;  11、如何在Struts 数据库应用程序中实现记录的删除、更新及...

    Struts开发实例

    7、Struts复选框的实现 8、Struts下拉框的实现 9、如何实现Struts 数据库应用程序 10、如何在Struts 数据库应用程序中实现分页显示 11、如何在Struts 数据库应用程序中实现记录的删除、更新及链接 12、如何在Struts ...

    Struts2标签库详解

    - `s:checkbox` 和 `s:radio`:用于创建复选框和单选按钮。 - `s:submit`:创建提交按钮,触发Action的执行。 - `s:select`:用于创建下拉列表,可以从Action的属性或常量配置中获取选项。 - `s:form`:定义表单...

    struts2标签解释

    `&lt;s:checkbox&gt;`用于创建复选框,可以绑定到Action的属性。`&lt;s:checkboxlist&gt;`则用于创建多选框,通常与列表结合使用,方便用户选择多个选项。 `&lt;s:combobox&gt;`用于创建下拉选择框,同样可以从Action的列表属性中获取...

    Struts2标签库详解.doc

    8. `&lt;s:checkboxlist list=""&gt;`:创建一组复选框,通常用于多个选项的选择。 9. `&lt;s:combobox&gt;`:创建一个下拉框,支持AJAX动态加载数据。 10. `&lt;s:bean name=""&gt;`:类似于Struts1.x中的标签,用于获取JavaBean的...

    struts 2标签

    7. `&lt;s:checkbox&gt;` 和 `&lt;s:checkboxlist&gt;`:分别用于创建单个复选框和复选框列表,方便用户进行多项选择。 8. `&lt;s:combobox&gt;`:创建下拉列表,可配置数据源。 9. `&lt;s:component&gt;`:用于创建自定义组件,可以是任何...

    struts从入门到精通.doc

    - 解释了如何使用Struts提供的标签来创建复选框和单选框。 - **12.1 Struts下JSP页面传递复选框值技巧** - 提供了一些处理复选框值的技巧。 - **12.1 Struts中下拉和选取/选项列表的HTML标签** - 讲述了如何使用...

    ssh增删改杀全选分页

    对于**全选删除**,通常需要在前端页面设置一个复选框,用户可以选择多条记录进行批量删除。后端Action会接收到选中的所有记录ID,遍历这些ID并调用Service的删除方法。Service会根据这些ID执行Hibernate的批处理...

    Struts2标签库详解[1].doc

    8. `&lt;s:checkbox&gt;`:创建复选框,允许用户选择多个选项。 9. `&lt;s:checkboxlist&gt;`:用于创建一组复选框,通常与列表或数组配合使用。 10. `&lt;s:combobox&gt;`:创建下拉选择框,允许用户从预定义的列表中选择一个值。 ...

    ExtJSgrid组件,分页展示全功能

    例如,可以设置某一列是否包含复选框(checkboxs),以及是否显示行号。 分页功能是ExtJS Grid的重要特性,它可以帮助用户有效地浏览大量数据,避免一次性加载所有数据导致页面响应变慢。在Grid中,分页通常通过...

    SH整合 部门和员工表

    其中修改的时候,采用了ajax的技术来提高用户的交互体验, 并且加入了回显功能,搜索提供了模糊查询,采用复选框来选择你要的部门, 非常适用于框架初学者来学习,系统已经完全完善。如有bug欢迎联系作者修改。

    第08章 Struts 2.1标签库详解与AJAX技术应用

    - `s:checkbox`/`s:radio`:创建复选框和单选按钮,支持多选和单选数据绑定。 - `s:select`:创建下拉列表,可以动态填充选项。 - `s:submit`:定义提交按钮,触发表单提交。 - `s:property`:显示Action或模型...

    struts2.0 标签清单

    `&lt;s:checkbox&gt;` 标签用于创建单个复选框,而`&lt;s:checkboxlist&gt;` 标签则用于创建一组复选框,通常用于多选列表。 ```xml ``` ### 7. `&lt;s:combobox&gt;` 标签 `&lt;s:combobox&gt;` 标签用于创建下拉选择框,可以接受一个...

    ssh整合的分页、批量删除

    1. **前端设计**:在JSP页面中,可以使用HTML的复选框让用户选择待删除的记录,同时设置一个提交按钮触发批量删除请求。 2. **数据传输**:当用户提交请求时,Struts的ActionForm或ModelDriven接口可以接收到这些...

    struts2.0标签库简介

    - 提供单选框和复选框的创建,支持数据绑定。 #### 8. `&lt;s:combobox&gt;` 和 `&lt;s:doubleselect&gt;` - 创建下拉列表和双列选择框,增强用户交互。 #### 9. `&lt;s:component&gt;` - 组件标签 - 用于创建自定义组件,提高...

    jsp+struts+hibernate实现分面显示功能

    开发者可能在JSP页面上设计了表单元素,如复选框或下拉菜单,让用户可以选择不同的分面进行过滤。 **Struts**是基于MVC(Model-View-Controller)设计模式的Java Web框架,用于组织和控制应用程序的业务逻辑。在分...

    structs程序设计从入门到精通word文档

    - **Struts下JSP页面传递复选框值技巧**:提供了一些技巧,帮助开发者更好地处理复选框的值。 - **Struts中下拉和选取/选项列表的HTML标签**:介绍了如何使用Struts的下拉列表和选项列表标签。 - **Struts中...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    1、 Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Servlet,JSP和custom tag library构建Web应用的一项非常有用的技术。由于Struts能充分满足应用开发...

Global site tag (gtag.js) - Google Analytics