日期:2014-05-18  浏览次数:20706 次

项目开发中遇到问题了,高人来拿分 300(或者更多)
我一般很少java大阪提问,但是提问就是分数多的,声明:单纯顶者不给分,只给能说出条理的
功能截图如下:

我左侧用DWR直接写一个树,数据库取出各个部门,点击每个部门,右面列出所有在此部门的人员。
问题产生了,就是我选择了几个部门分别选中几个checkBox之后,一并提交,怎么才能后台获得每个部门下分别选中的人?
其实我就是站在客户角度考虑的,省去了多余的步骤

------解决方案--------------------
嘿嘿,楼主。
我帮你做好这个,不过有几个交换条件,你把界面设计给我(我觉得你做的比我的好看多了)
------解决方案--------------------
既然你的部门可以生成这样的树状结构。肯定生成的依据的这个字段是又分级规律的。
可以把能唯一确定分级的代码,通过逗号或者-拼接到用户的checkbox 的value属性里面。
比如如图有3级吧:
某省 100000000
省下市 101000000
市所辖单位 101023000
单位下部门 101023000

该单位下的用户 <input type="checkbox" name="userid" value="用户id-10102300" />

这样在后台获取到的 字符串数组中逐个截取出来比较。
这样就是比较麻烦,有更好点的方法,我也学习.
------解决方案--------------------
我觉得 你可以不用考虑部门是什么啊
每当你选中一个部门的时候,会出现一些对应的人
然后你在选择人 是吧 你就在选人的时候给checkbox一个onclick事件
把这个人存在一个集合里
集合可以定义为一个全局变量
你在切换到其他部门的时候
还是把选中的人加入到刚才的集合里就可以了啊
如果还想知道这个集合里的人分别是那个部门的
人的表里应该有对应的字段吧
我觉得你选的时候不用考虑部门 直接加人进集合就ok了
------解决方案--------------------
省级
市级
公司
部门
个人
我是这样想的,第一次点选择时把上面那5个级别构造成一个对象(包含标识符)
然后放入容器里面如数组和JSON等 。。
以后选择时先判断容器中有没这个对象,有的话,如果复选框不选种则删除该对象。选种则不变
相反没有这个对象 ..............................
你树行是DWR。没次都变了。但那个容器可以不变(页面没刷新,只是刷新树).
所以最后提交那个容器就好了。
------解决方案--------------------
我也来试试,呵呵。
你的问题是如何在选择另外的部门刷新页面之后,仍保存之前页面所选择的员工ID或标识信息。
与其考虑刷新之后的页面传递办法,不如这样。
在每一次点选部门树列表的动作中接受和传递一个包含所有部门和所有员工的FORM,
这个FORM由自己构造,结构和内容都可以事先定好,内容中所有员工都处在非选中状态,
与页面的初始状态重合,内容在每次选择动作时修改,修改其是否被选中的状态。
在提交的时候将FORM做提交,接收自己构造的FORM,而不是页面FORM,解析就可以得到
所有部门中被选择过的员工ID或者其他标志信息了。
------解决方案--------------------
这个问题的目标是找到一种缓存方案。

缓存能放哪里?无非就是页面(javascript)、服务器端(session)、cookie(前提是浏览器不禁用)

cookie最好不要用。
服务器方案会增加调用动作,不算最佳解决方案。

17楼给出了页面缓存的最佳解决方案。你说“那样我想过,那么多的操作都要每步去链接DWR。可能不是好的决策,假如批量选择,或者多个用户同时操作,会不会造成崩溃?”,是你误会了他的意思,他说的那些动作都是用javascript来实现的
--用javascript创建一个集合,
--你选中一个用户(不管哪个部门结点的都一样),就往集合里面添加。
--当你取消选择时,到集合里面找到它并删除。
--保存的时候,就把集合里面的用户id列表当作数据发给服务器。
--当重新选择某部门时,把每个部门用户到集合里面查找一次,如果已经存在于集合中,就在界面把它选中。

如果你觉得JAVASCRIPT不好用,我再给你提供服务器session方案
--在服务器端的dwr增加1个方法,能保存每个部门的选择列表到session中。
--增加一个清空方法,当页面用户点击“清空”时,能清空上面所说的session
--修改dwr取部门用户的方法,在取到用户列表后还到session里面查一下,看看哪些用户已经被选中过,把这个状态也作为数据给页面。
--当用户切换部门时,把选中的用户列表丢给dwr
--当用户保存时,把当前部门的用户列表给dwr的保存方法
--dwr的保存方法除了接受当前部门的用户列表外,还得到session中找到前面选中的。一起保存

服务器方案要考虑的一个最大的难点是
--用户假设没有保存,也没有清空,直接退出了页面,而后来就进入了页面再搞另一个,那就可能把前面留下的垃圾数据也用上了。
--因此,最好是在用户进入界面时,给一个唯一的ID号,用于标示一次操作。
--数据传递中,用这个唯一ID号,避免垃圾数据。

可以看出:服务器方案比页面方案麻烦得多,而且多了很多次服务器调用。因此我还是推荐页面方案

------解决方案--------------------
友情up
------解决方案--------------------
java初学者,意思明白但不懂做,似乎可以先把你选中的放到一个叫什么东西里,再提交。不知行不行。
------解决方案--------------------


不知道你用的是什么样的结构,如果是动态加载的话,可以切换“单位”前先用一个 Array 记录下目前的“收件人”的状态。
如果你是一次性加载的话那更简单了,留出一个字段来记录状态就行了。


还是看不出来有什么难的,可能是我没理解好你的需要。
------解决方案--------------------
使用ajax的方式,用户每次选择了机构,然后选择了用户后,将选择项存入xml,最后提交时,将整个xml提交至服务器,服务器端解析此xml即可。 我以前有个系统就是这么做的。
------解决方案--------------------
不好 收件人里有芙蓉姐姐
------解决方案--------------------
轻轻的我走了,