Here is JSF code:
<h:inputText binding="#{bean.input}" />
And here is a part of backing bean for binding support:
private HtmlInputText input;
public void setInput(HtmlInputText input) {
this.input = input;
}
public HtmlInputText getInput() {
return this.input;
}
When I open page at first time everything works fine but when I open it at second time (refresh or open the same url in another tab or any other way) I get duplicate ID error. Error message says that <h:inputText>
has no unique ID. Here is a part of long error message:
java.lang.IllegalArgumentException: Component ID formId:inputId has already been found in the view
+id: inputId type: javax.faces.component.html.HtmlInputText@cafebabe
The problem occured after I added binding
attribute. If I remove it, everything will work fine again. How do I properly use binding
attribute?
Duplicate component ID errors may occur when:
NamingContainer
.<f:subview>
is been declared in the include page instead of the parent page.NamingContainer
.Here,
NamingContainer
is among others the<h:form>
,<h:dataTable>
and<f:subview>
.When using
binding
, you should bind it to a property which is used exclusively by the component in question on a per-request basis. Your specific case indicates that this binding is been shared by multiple components, perhaps across different requests. When you bind the component to a property of a backing bean, then the backing bean should absolutely not be in a broader scope than the request scope. See also JSF 2.0 specitication chapter 3.1.5 (emphasis mine):See also:
I had the same problem until found this tag that evit the duplicate component id