我正在研究“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已在视图中找到”
当发生此异常时,似乎有一种模式。有没有办法从其父级“删除”组件?
答案 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>