Дублирование идентификатора всех дочерних компонентов при использовании атрибута привязки в родительском компоненте при второй загрузке / перезагрузке представлений - PullRequest
0 голосов
/ 15 января 2019

миграция сервера 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...