Jsf 绑定属性导致在视图中找到重复的组件ID

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

以下是JSF代码:

<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实例依赖于在单个线程内运行。在“会话”范围中放置组件绑定时,也可能对内存管理产生负面影响

另见:

我也遇到了同样的问题,直到找到了这个显示重复组件id的标签

<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>