데이터베이스에서 데이터를보기 위해 HtmlDataTable을 사용하는 데 문제가 있습니다.h : dataTable binding => 중복 ID
구성 요소를 만들 때 표가 항상 (항상은 아님) 두 번째 열 일 때가 있습니다.
올바르게 표시되고 dtb 등으로 이동하지 않고 몇 번 새로 고침하면 3 대신 6 개의 열이 나타나며 응용 프로그램이 불안정해질 수 있습니다. 그것의 "구성 요소에 대한 중복 ID"를보고 있기 때문에 테이블 작동하지 않을 수있는이 시간 이후 ..
간단한 예 (출처 : http://balusc.blogspot.com/2006/06/using-datatables.html) :
<h:form id="bde">
<h:dataTable id="tbl"
binding="#{myBDE.dataTable}"
value="#{myBDE.dataList}"
var="bdeItem">
<h:column>
<f:facet name="header">
<h:outputText value="S" />
</f:facet>
<h:outputText value="#{bdeItem.s}" rendered="#{!myBDE.editModeRow}"/>
<h:inputText value="#{bdeItem.s}" rendered="#{myBDE.editModeRow}" required="true" size="3"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="ID" />
</f:facet>
<h:outputText value="#{bdeItem.id}"/>
</h:column>
</h:dataTable>
</h:form>
그리고 java.class
protected HtmlDataTable dataTable;
public void setDataTable(HtmlDataTable dataTable)
{
this.dataTable = dataTable;
}
public HtmlDataTable getDataTable()
{
if (dataTable == null)
{
dataTable = new HtmlDataTable();
dataTable.setRows(DEFAULT_TABLE_ROWS);
}
return dataTable;
}
그리고 오류 메시지 :
javax.servlet.ServletException: Component ID j_idt92:bde:tbl:j_idt129 has already been found in the view.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)
root cause
java.lang.IllegalStateException: Component ID j_idt92:bde2:tbl:j_idt129 has already been found in the view.
com.sun.faces.util.Util.checkIdUniqueness(Util.java:821)
com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
com.sun.faces.util.Util.checkIdUniqueness(Util.java:805)
com.sun.faces.application.view.StateManagementStrategyImpl.saveView(StateManagementStrategyImpl.java:144)
com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:133)
com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:418)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
팔로우 구성 요소의 트리로 편집. 나는 코드에 중복 된 것이 없지만 dataTable은 새로운 열을 만들고 그 후에는 실제로 복제됩니다.
두 개의 비슷한 모듈이 있고 세 번째 모듈이 작동하지 않습니다.
이런 종류의 문제를 경험 한 적이 있습니까? 빈은 요청 범위의 세션이 대신 범위이며 여러 개의보기 중이 콩을 공유하는 경우 조언
나를 (다시) 구해 줬습니다. 나는 하루 종일 아무것도 보지 못했다. 그리고 이제는 작동합니다! BalusC – gaffcz
감사합니다. 끝났습니다. 다시 한 번 감사드립니다! – gaffcz
BalusC, 요청 범위를 변경 한 후 더 이상 DataTable (저장, 편집, 삭제, dtb에 추가) 작업을 할 수 없습니다. 객체는 응답 후에 만료되므로 null 예외를보고합니다. 어떻게 든을 사용할 수 있습니까? ViewScope를 사용하려고했지만 HtmlDataTable을 바인딩 할 때 보이지 않습니다. 아니면 해결할 다른 방법이 있습니까? 아니면 DataModel을 사용하려고합니까? –
gaffcz