是否可以调试重复的ID?

时间:2015-08-11 14:03:07

标签: jsf richfaces jsf-1.2

我收到了重复的ID错误,但我无法确定哪个元素是什么意思。

java.lang.IllegalStateException: duplicate Id for a component pb_1_WAR_TEST_INSTANCE_1234_:_viewRoot:mainForm:tableOverview:j_id66

我知道它必须在tableOverview中但是具有ID的元素: 无法找到j_id66。当我在浏览器中搜索它时,我只能找到ID更高的元素,

pb_1_WAR_TEST_INSTANCE_1234_:_viewRoot:mainForm:tableOverview:j_id67

有没有办法找出哪一个是什么意思?

1 个答案:

答案 0 :(得分:0)

最有可能是<h:column><rich:column>

找出确切组件的快速方法是findComponent()

UIComponent component = context.getViewRoot().findComponent("pb_1_WAR_TEST_INSTANCE_1234_:_viewRoot:mainForm:tableOverview:j_id66");
System.out.println(component); // HtmlColumn?

或者,只需打印出JSF组件树。 JSF 2.x为此提供<ui:debug>,在JSF 1.x中,您必须编写自定义代码,以递归方式遍历和打印UIViewRoot及其所有子代。这是一个启动示例:

public static void print(UIComponent component) {
    System.out.println(component.getId() + " = " + component.getClass());
    for (UIComponent child : component.getChildren()) {
        print(child);
    }
}
print(context.getViewRoot());

至于你的具体问题,它很可能是由一个组件绑定到一个不在请求范围内的bean引起的。别这么做。

另见: