JSF中的重复组件标识

时间:2012-03-27 17:45:45

标签: jsf components

我正在研究“JSF in action book”中的一个示例,该示例显示由输入驱动的数字的动态网格(html表)。 jsp部分位于

之下
<p>
<h:panelGrid id="controlPanel"
binding="#{helloBean.controlPanel}"
columns="20" border="1" cellspacing="0"/>
</p>
<h:commandButton id="redisplayCommand" type="submit"
value="Redisplay"
actionListener="#{helloBean.addControls}"/>

绑定bean代码在

之下
public void addControls(ActionEvent actionEvent)
{
    Application application = FacesContext.getCurrentInstance().getApplication();
    List children = controlPanel.getChildren();
    children.clear();
    for (int count = 0; count < numControls; count++)
    {
        HtmlOutputText output = (HtmlOutputText)application.
        createComponent(HtmlOutputText.COMPONENT_TYPE);
        output.setValue(" " + count + " ");
        output.setStyle("color: blue");
        children.add(output);
    }
}

代码适用于少数几个值,然后无处不在我得到此错误

“javax.servlet.ServletException:组件ID welcomeForm:j_id51已在视图中找到”

当发生此异常时,似乎有一种模式。有没有办法从其父级“删除”组件?

3 个答案:

答案 0 :(得分:3)

binding属性应该引用请求范围的bean属性,而不是会话范围的属性。

另见:

也就是说,根据具体的功能需求,可能有更好的方法来使用普通的UI组件来实现这一要求。

答案 1 :(得分:0)

检查表单中是否有两个具有相同ID的元素。就我而言,这就是问题所在。

答案 2 :(得分:-2)

将此参数放到web.xml

    <context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
</context-param>