注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

白小博

Morning的脚印,一步,一步……

 
 
 

日志

 
 

L-20061220  

2006-12-20 21:44:00|  分类: L-实习日志 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
2006-12-20

小白终于开始做复用部分了。不管后面复用逻辑如何,先把网页和服务器之间的数据传输部分的技术问题解决了再说。
小白网页上有一个节目选择列表,样子如下:
--------        --------
|节目一|         |      |
|节目二|    >    |      |   --------
|节目三|    <    |      |   |Submit|
|节目四|    >>   |      |   --------
|节目五|    <<   |      |
|     |         |      |
--------        --------
小白从左边列表中选择节目到右边列表里面,然后点击Submit按钮后,将所选择的节目单传回服务器端的Backing Bean中进行复用处理。
小白但是,网页上的列表框与应用程序的完全不同,HTML的<select>标签与JSF的<h:selectManyList>又有很大区别,这样以来,就给我添了好多麻烦。
小白网页上面的节目选择中间那些按钮全部都是用javascript实现的,动态添加一些options,这些options并没有与JSF的<f:selectItems>标签整合,所以,用JSF内部的机制,无法让Backing Bean里获得到所选择的节目单。
小白所以,我想无论是通过什么方法选择了节目到右边的列表框,当提交页面的时候,它们都会以某种方式被传送到服务器端的。首先就想到了HTTP协议里面包含的参数。于是,我就在Backing Bean里面在提交页面的时候,将所有的参数打印出来,看看是不是真的能够获得这些列表框里的内容。
小白先用的是FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()来获得,可是,不管列表框里面选择了多少个项目,读取出来的都只是所选项目中的第一个。我困惑了,难道这些项目只能选则一个?不应该啊,很多IT网站上面都有搜索数码产品的模块,让选择品牌的地方往往都是用列表框实现的,可以多选啊。
小白经过网上查找资料,发现原来还有另一个方法专门来解决这个问题的:FacesContext.getCurrentInstance().getExternalContext().getRequestParameterValuesMap()。用这个方法,可以通过一个Key来获得这个Key所对应的所有参数,因为它们返回的都是String[]。这样就可以通过那个列表框的id来获得其中选择的内容了。
小白当然,这些参数一定是在列表框里被选定的才能传回服务器,而不是所有列表框里的项目都能被传回。要是从左边选到右边,还要让用户自己把右边的全部选中,太不人性化了。我想了个办法,就是在Submit按钮点击的时候,用javascript写了一个让列表里的所有项目都被选中的小脚本,很简单:
function selectAll()   // m2是列表框
{
    m2len = m2.length;
    for(var i = 0; i < m2len; i ++)
        m2.options[i].selected = true;
}
小白哈哈,问题解决了,在服务器的Console中输出的所有参数里面有全部的被选择的节目单!下一步就是服用逻辑了,明天继续 ^_^
  评论这张
 
阅读(92)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017