首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

项目开发中遇到有关问题了,高人来拿分 300(或者更多)

2012-01-07 
项目开发中遇到问题了,高人来拿分 300(或者更多)我一般很少java大阪提问,但是提问就是分数多的,声明:单纯

项目开发中遇到问题了,高人来拿分 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即可。 我以前有个系统就是这么做的。
[解决办法]
不好 收件人里有芙蓉姐姐
[解决办法]
轻轻的我走了,


正如我轻轻的来;
我轻轻的招手,
作别西天的云彩。
 
那河畔的金柳,
是夕阳中的新娘;
波光里的艳影,
在我的心头荡漾。
 
软泥上的青荇,
油油的在水底招摇;
在康河的柔波里,
我甘心做一条水草!
 
那榆荫下的一潭,
不是清泉,
是天上虹;
揉碎在浮藻间,
沉淀着彩虹似的梦。
[解决办法]
我也认为39楼的是可行的.我们的系统也是这样做的.json和xml都可以.再到后台解析json或xml.有了数据,一切都可以搞定了.
[解决办法]
很久以前做相册打印的时候实现过,用一个隐藏的Input记录

用户的ID肯定是唯一的吧……

HTML code
<input type="hidden" id="selectedUsers" value="," />  这里多一个,有用处的<input type="checkbox" onclick="JavaScript:SelecteMe(1,this);" /> A<input type="checkbox" onclick="JavaScript:SelecteMe(2,this);" /> B<input type="checkbox" onclick="JavaScript:SelecteMe(3,this);" /> C
[解决办法]
呵呵把人的属性都带着
================部门==========姓名=====联系方式。。。
关系单位单独建个表
两个表关联,显示的时候按照部门进行分类
选中提交以后前台检索的时候只检查人,后台统计每个部门选中的人不就可以了嘛
[解决办法]
用javascript 构造一个XML 发到服务器。

XML code
<bumens id=bid1><bumen><person>id1</person><person>id2</person><person>id3</person></bumen><bumens id=bid2><bumen><person>id1</person><person>id2</person><person>id3</person></bumen></bumens>
[解决办法]
看了楼上诸位的方案,我觉得不知道是我没有彻底理解楼主的意思,不过我认为没有那么复杂。
大家说了一堆,都是在谈每次操作与服务器的交互,当然有的人说是写库,有的人是写cookie,有的人是写session.

这里我支持12楼的说法:
【在页面上放一个隐藏字段,在勾选是把选中的人员的信息(不知道是不是id)写到字段中,用这样的形式保存,A-B-C-D,在反勾时就删除响应的信息,到最后传到后台时,在把取到的参数split就可以获得各个选中的人员信息】

然后我说一下我理解的实现方式:

假定收件人单位和收件人代码是两个frame,也可能不是,但是应该可以肯定的是:
每个单位和每个人的 checkbox的值为唯一的,最终我们要获取的是人的集合信息。

因为现在全部页面都走ajax,那么右侧的人员列表是动态生成的,而且整个页面是无刷新的,如果页面刷新的话,此方式无效。

好,现在我们在这样来实现。

在右侧或者左侧,放置一个固定元素,比如<input type="hidden" name="allvalues">
每次点选checkbox后,javascript事件中设置 "allvalues".value="allvalues".value+ "," +checkboxid.value

然后提交的时候,只要request 这个allvalues就可以了。


[解决办法]
你把,每个部门下的人,在树加载是,就连接到Value属性上加个区别,

如下:市场部

<input type="checkbox" name="checkbox" value="checkbox:1,23,4,34" /> 市场部

对了你最好把市场部的iD也加上,然后到后台去解析字符串。


希望可以帮你,不过这个办法有点笨。
[解决办法]
接70楼

综合上述情况,数据缓存上存在一定的难度,
假设你选三个部门(a,b,c),对应的主键是(1,2,3);
而选择的a部门 (1,2,3)为部门下的三个人的主键,
而选择的b部门 (1,2,3)为部门下的三个人的主键,
而选择的c部门 (1,2,3)为部门下的三个人的主键,
那么最终需要的数据就是
{"1-1,1-2,1-3","2-1,2-2,2-3","3-1,3-2,3-3"} 
或者
{1-1,1-2,1-3,2-1,2-2,2-3,3-1,3-2,3-3}

这样两种数据情况都是做到数据传递的准确的,至于怎么来实际处理,相信对楼主而言是没什么问题

热点排行