миграция сервера weblogic 10.3.0 (использовались java 6, jsf framework (Mojarra-2.1.7) и (на основе maven) работали совершенно нормально) на сервер weblogic 12c, а также java 6 на java 8 с тех пор возникли проблемы с дублированием id в любых представлениях, использующих атрибут привязки компонента. Все управляемые bean-компоненты имеют сессионную область, и некоторые bean-объекты совместно используются различными представлениями при переходе от одного к другому.
Я попытался заменить уже использованные jsf jar (Mojarra-2.1.7) на (Mojarra-2.2.2) и javax.faces / javax.faces.api.jar (Mojarra-2.3). Удаление привязки из компонентов jsf в XHTML и сессиях от бобов не выдает ошибку дублирующегося идентификатора, но я не могу этого сделать (по причине).
Я прочитал почти каждый пост об ошибке дублирования идентификатора и этой спецификации JSF - JSF 2.0, раздел 3.1.5 «... Настоятельно рекомендуется, чтобы разработчики приложений помещали управляемые bean-компоненты, на которые указывают выражения привязки компонентов, в область« запроса », а не какой-либо другой области. Это связано с тем, что для помещения ее в область сеанса или приложения потребуется безопасность потоков, поскольку экземпляры UIComponent зависят от работы внутри одного потока. Также возможны негативные воздействия на управление памятью при размещении привязки компонента в «сеансе». или «просмотр» областей.
Просто интересно, если бы речь шла о сфере действия бина, тогда эта ошибка должна была произойти и с предыдущей версией weblogic 10.3 и jsf 2.1.7, но этого не произошло. Может ли это быть из-за версии weblogic 12c или java8 или jsf ??
Дерево компонентов:
+id: checkDt
type: org.primefaces.component.datatable.DataTable@6f454948
+id: ColHeader1 <===============
type: org.primefaces.component.column.Column@2efbb3b1
+id: j_idt98
type: javax.faces.component.html.HtmlOutputText@14cbcb4
+id: j_idt99
type: org.primefaces.component.selectbooleancheckbox.SelectBooleanCheckbox@1025f970
+id: Col2
type: org.primefaces.component.column.Column@556fed35
+id: Name
type: javax.faces.component.html.HtmlOutputLabel@267aaa12
+id: j_idt100
type: org.primefaces.component.tooltip.Tooltip@42370b75
+id: Col3
type: org.primefaces.component.column.Column@7d66943a
+id: reasonText
type: org.primefaces.component.inputtext.InputText@57cac8e6
+id: ColHeader1 <===============
type: org.primefaces.component.column.Column@2493d237
+id: j_idt98
type: javax.faces.component.html.HtmlOutputText@5e051973
+id: j_idt99
type: org.primefaces.component.selectbooleancheckbox.SelectBooleanCheckbox@170b81cd
+id: Col2
type: org.primefaces.component.column.Column@1687f632
+id: Name
type: javax.faces.component.html.HtmlOutputLabel@2c3f9cbf
+id: j_idt100
type: org.primefaces.component.tooltip.Tooltip@5a07c6ca
+id: Col3
type: org.primefaces.component.column.Column@114921ae
+id: reasonText
type: org.primefaces.component.inputtext.InputText@385673d3
+id: j_idt101
type:
.xhtml файл:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:body>
<h:form id="New">
<p:dataTable id="checkDt" var="check" rowIndexVar="rowIndex"
value="#{requestBean.requestVOList}"
binding="#{requestBean.ListDT}" <!-binding is used in parent comp -datatable so all the child component ids are repeated in tree-!>
style="width:90%">
<p:column id="ColHeader1" styleClass="TEXT-ALIGN-CENTER"
style="white-space:normal;text-align:center;width:130px;">
<f:facet name="header">
<h:outputText
value="header 1"></h:outputText>
</f:facet>
<p:selectBooleanCheckbox value="#{check.selectedCheckBox}"
disabled="true">
</p:selectBooleanCheckbox>
</p:column>
<p:column id="Col2"
headerText="header 2">
<h:outputLabel id="Name" value="#{check.nameShort}">
<p:tooltip for="Name" value="#{check.nameShort}"></p:tooltip>
</h:outputLabel>
</p:column>
<p:column id="Col3"
headerText="header 3">
<p:inputText id="reasonText" value="#{check.reason}"
autocomplete="off" disabled="true"></p:inputText>
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
боб:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIData;
@ManagedBean
@SessionScoped
public class RequestBean {
private RequestVO requestVO = null; // a seperate class (or model) having its property variables and getter setters like selectedCheckBox(boolean),nameShort, reason (Strings)
private List<RequestVO > requestVOList;
private UIData listDT = null;
public List<RequestVO> getRequestVOList() {
return requestVOList;
}
public void setRequestVOList(List<RequestVO > list) {
this.requestVOList= list;
}
public UIData getListDT() {
return listDT;
}
public void setListDT(UIData listDT) {
this.listDT = listDT;
}
}
RequestVO.java:
public class RequestVO{
private boolean selectedCheckBox = false;
private String nameShort=null;
private String reason=null;
public boolean isSelectedCheckBox() {
return selectedCheckBox;
}
public void setSelectedCheckBox(boolean selectedCheckBox) {
this.selectedCheckBox = selectedCheckBox;
}
public String getNameShort() {
return nameShort;
}
public void setNameShort(String nameShort) {
this.nameShort = nameShort;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
}
РОМ:
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.2</version>
<scope>provided</scope>
</dependency>