Jsf 绑定属性导致在视图中找到重复的组件ID
以下是JSF代码:Jsf 绑定属性导致在视图中找到重复的组件ID,jsf,binding,duplicates,components,Jsf,Binding,Duplicates,Components,以下是JSF代码: <h:inputText binding="#{bean.input}" /> 当我第一次打开页面时,一切正常,但当我第二次打开页面时(刷新或在其他选项卡或任何其他方式中打开相同的url),我会得到重复的ID错误。错误消息说,没有唯一的ID。下面是长错误消息的一部分: java.lang.IllegalArgumentException: Component ID formId:inputId has already been found in the view
<h:inputText binding="#{bean.input}" />
当我第一次打开页面时,一切正常,但当我第二次打开页面时(刷新或在其他选项卡或任何其他方式中打开相同的url),我会得到重复的ID错误。错误消息说,
没有唯一的ID。下面是长错误消息的一部分:
java.lang.IllegalArgumentException: Component ID formId:inputId has already been found in the view
+id: inputId type: javax.faces.component.html.HtmlInputText@cafebabe
我添加了
绑定
属性后出现了问题。如果我移除它,一切都会恢复正常。如何正确使用绑定
属性?在以下情况下可能会出现重复的组件ID错误:
- 相同的ID用于同一
内的不同组件NamingContainer
- 物理上不同的组件绑定到同一bean的相同属性
是在include页面而不是父页面中声明的- 同一个include页面多次包含在同一
中NamingContainer
- 组件是在没有指定显式ID的情况下动态创建的
、
和
使用绑定
时,应将其绑定到相关组件在每个请求的基础上专门使用的属性。您的具体案例表明,此绑定由多个组件共享,可能跨不同的请求共享。当您将组件绑定到支持bean的属性时,支持bean绝对不应该位于比请求范围更广的范围内。另见第3.1.5章(重点):
3.1.5组件绑定
组件绑定通常与JavaBean结合使用,JavaBean通过托管Bean创建工具动态实例化(请参阅第5.8.1节“VariableResolver和默认VariableResolver”)强烈建议应用程序开发人员将组件绑定表达式指向的托管bean放在“请求”范围内。这是因为将其放在会话或应用程序范围内需要线程安全,因为UIComponent实例依赖于在单个线程内运行。在“会话”范围中放置组件绑定时,也可能对内存管理产生负面影响
另见:
<f:subview id="top">
<p:outputPanel id="panelHeader1"
binding="#{circularRequestBean.panelHeader}" autoUpdate="true"
class="col-md-12 col-sm-12 col-xs-12 col-lg-12 wihtoutPadding"
style="padding:0px; !important; display:block;" />
</f:subview>
支持bean具有会话作用域。此bean仅由该组件使用。你说“独占”是什么意思?因此同一会话中的不同请求/视图共享同一绑定?这并不总是奏效。把它放在请求范围的bean中。我将完全避免绑定,并找到合适的解决方法。但我只是想知道这是正常的绑定行为(即来自规范)?对于标准jsf组件,我会得到同样的结果吗?还是视情况而定?嗯?只需放入请求范围并进一步使用它。您甚至可以将其作为会话范围bean的子级。另一个原因可能是该组件已在包含/组合文件中使用,并且在同一页面中多次包含/重用。感谢您列出可能出现的问题。它的第二项让我洞察到getLineChartComponent()方法应该返回null(在我的情况下,它不会破坏任何功能,我对setter方法感兴趣)。
<f:subview id="top">
<p:outputPanel id="panelHeader1"
binding="#{circularRequestBean.panelHeader}" autoUpdate="true"
class="col-md-12 col-sm-12 col-xs-12 col-lg-12 wihtoutPadding"
style="padding:0px; !important; display:block;" />
</f:subview>