随笔-348  评论-598  文章-0  trackbacks-0
        今天同事开发的时候碰到一件很郁闷的事情,就是同样的选择控件在其他页面使用没有任何问题,在他的一个页面里面使用第一次正常,之后打开就总是报错,报错提示就是控件ID重复,好像是duplicate id 云云的。
        我们尝试了给每个控件都设定一个id,还是报错,如果去掉另一个跟它有冲突的选择控件,就没问题,但是不可能去掉的,因为那一项需要去选择。后来想了很多办法,都不是很好,最后同事找到了一个办法,在我封装的底层BaseBean中,给程序生成的选择项控件手动添加id:
            items = new UISelectItems();
            items.setId(
"j_id_"+String.valueOf(System.nanoTime()));
这样,每个控件都有了一个唯一的ID,问题解决了。
提示:不可以用纯数字做ID,会出现错误的。

这里使用了纳秒来生成编号,因为毫秒还是经常会出现id重复。

不知道为什么会有这个问题,其他页面调用相同的底层都没有任何问题,只有这个页面会有,可以确定跟我们写的代码没有关系,因为页面重新做过的,一个控件一个控件添加的试的,就是那两个控件同时出现时报错,所以我想是不是底层生成控件ID那有bug,自己手动生成控件ID就没有任何问题。以后有机会,再研究下源码。

注意一下,大部分控件ID重复都是出现在选择之类的控件上面。

---------------------------------------------------------
专注移动开发

Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2008-11-26 15:31 TiGERTiAN 阅读(1832) 评论(4)  编辑  收藏 所属分类: JavaJSF

评论:
# re: JSF生成控件ID重复的解决办法 2008-11-27 16:34 | fee
注意下组件的嵌套,另外注意定义ID和自动分配ID的冲突。应该不是bug  回复  更多评论
  
# re: JSF生成控件ID重复的解决办法 2008-11-27 17:03 | TiGERTiAN
@fee
组件的嵌套都注意的,我们没有自定义ID,全部自动生成,第一遍打开页面是好的,第二遍打开就有问题了,而且很莫名其妙,几个人都重新做了,还是有问题,不知道是不是我们自己写的框架跟它有冲突,但检查代码,都没有发现什么问题,其他页面也是好的。  回复  更多评论
  
# re: JSF生成控件ID重复的解决办法[未登录] 2008-12-01 10:23 | 灵韵
我们那时候用的是NETBEANS,也遇到这个问题,然后我们在页面的prerender()方法中调用了
public void prerender() {
if(super.isPostBack())
layoutPanel1.getChildren().remove(layoutPanel1.findComponent("lstRole"));
}  回复  更多评论
  
# re: JSF生成控件ID重复的解决办法 2008-12-01 12:32 | TiGERTiAN
@灵韵
你是移除已存在的控件?还是固定ID的,我们这个有点蹊跷就是,所有ID都是JSF自己生成的还有这种错误。。。汗。。。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: