Рендеринг списка выбора ошибок Jboss с использованием витрины


связанные ссылки: PrimeFaces PickList с OmniFaces validateAll приводит к исключению NullPointerException

эта проблема аналогична этой ссылке, потому что, когда я выполняю отладку picklistRender, я получаю ту же ошибку, что и в ссылке ранее, те же синтомы, но я читаю все проблемы связанный с историей, Томас Андрашко предположил, что это проблема мохарры, но я попытался проверить с помощью myfaces-version-22 и myfaces-version-23, и я столкнулся та же проблема


Я пытаюсь выяснить, как разрешить мой пример, например, showcase p:picklist, но не worls, как сказано в документах, я попробовал несколько вариантов, таких как

 - don't use mojarra,use myfaces
 - change primefaces version 7.0 to 8.0.RC1
 - put a custom converter
 -jboss-deployment-structure.xml (disables packages from jboss)

Когда возникает ошибка? - загрузка страницы, почему я использую конвертер? - это вариант Я пытался решить проблему, но вопрос возникает раньше, я тестирую с преобразователем или без него и происходит та же ошибка.

окружающая среда

-Jboos EAP 7.2 
- repo https://github.com/Qleoz12/Primefaces-Mydemo

но всегда у меня эта ошибка

java.lang.NullPointerException

viewId=/components/usingCompositeComponent.xhtml
location=I:\developer\Fado\Servidores\jboss-eap-7.2\standalone\deployments\Primefaces-        
Mydemo.war\components\usingCompositeComponent.xhtml
phaseId=RENDER_RESPONSE(6)

Caused by:
java.lang.NullPointerException
at org.primefaces.component.picklist.PickListRenderer.encodeMarkup(PickListRenderer.java:103)

xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition 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"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:ccp="http://java.sun.com/jsf/composite/cc"
    template="../template/ui.xhtml">
    <ui:define name="body">
        <p:pickList 
            id="FF"
            value="#{CompositeComponent.cities}" 
            var="cities"
            itemLabel="#{cities}"
            itemValue="#{cities}"
            converter="PickListConverter"
        >
        </p:pickList>
    </ui:define>
</ui:composition>

фасоль

package Beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.inject.Named;

import org.primefaces.model.DualListModel;

@Named
@javax.faces.view.ViewScoped
public class CompositeComponent implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(CompositeComponent.class);
    private DualListModel<String> cities;
    List<String> citiesSource = new ArrayList<String>();
    List<String> citiesTarget = new ArrayList<String>();

    public CompositeComponent() {
        super();
    }

    @PostConstruct
    public void init() {
        // Cities
        citiesSource.add("San Francisco");
        citiesSource.add("London");
        citiesSource.add("Paris");
        citiesSource.add("Istanbul");
        citiesSource.add("Berlin");
        citiesSource.add("Barcelona");
        citiesSource.add("Rome");

        cities = new DualListModel<String>(citiesSource, citiesTarget);
    }

    public DualListModel<String> getCities() {
        return cities;
    }

    public void setCities(DualListModel<String> cities) {
        this.cities = cities;
    }

}

преобразователь

package converter;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import org.primefaces.component.picklist.PickList;
import org.primefaces.model.DualListModel;


@SuppressWarnings({"unused", "rawtypes"})
@FacesConverter("PickListConverter")
public class PickListConverter implements Converter{

    public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {
        PickList  p = (PickList) component;
        DualListModel dl = (DualListModel) p.getValue();
        return dl.getSource().get(Integer.valueOf(submittedValue));
    }

    public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
        PickList  p = (PickList) component;
        DualListModel dl = (DualListModel) p.getValue();
        return  String.valueOf(dl.getSource().indexOf(value));
    }
}

  1. вопрос А для PickListRenderer NPE находится в строке 78, затем 128 внутри PickListRenderer:

    encodeList(context, pickList, clientId + "_target", PickList.TARGET_CLASS, model.getTarget(),
            pickList.getFacet("targetCaption"), pickList.isShowTargetFilter(), false); 
    

    выпуск primefaces

переменная NPE, связанная с моделью, всегда имеет значение null внутри encodeMarkup, которое впоследствии вызывает encodeList с этой моделью null.

DualListModel model = getModelValueToRender(context, pickList);

stackTrace https://pastebin.com/wLKZWReg


  1. оба вопроса связаны, потому что в какой-то момент в другом вопросе они могут решить проблему, но я слежу за всеми материалами, которые они сделали, но я не могу понять, да, оба вопроса похожи, у них есть небольшие отличия, но для меня это тот же сценарий

7: Если это не связано с мохаррой, удалите тег мохарры. 8: Запустите приложение jsf в режиме разработки JSF.

да, я пытаюсь устранить эту ошибку, тестируя с помощью мохарры или проверяя мои лица, чтобы не удалить тег мохарры.


person qleoz12    schedule 30.12.2019    source источник
comment
@Kukeltje да, да, я создаю простой проект простых лиц только для тестового списка выбора, а не для всех проблем, которые вы можете найти по соответствующей ссылке ....   -  person qleoz12    schedule 30.12.2019
comment
Я приветствую ссылку на репозиторий, который я создаю, я сделал этот запрос, потому что другие пользователи предлагают создать новый запрос, да, он очень похож на связанную ссылку, но я попытался прокомментировать сообщение со ссылкой, но моя репутация меньше что 50 баллов за это я не могу, и омнифейсом не пользуюсь   -  person qleoz12    schedule 30.12.2019
comment
Я не понял, что это мой минимальный пример для проверки ситуации github.com/Qleoz12/Primefaces-Mydemo,   -  person qleoz12    schedule 30.12.2019
comment
минимальный воспроизводимый пример должен быть в вопросе, а не в github или другой внешней системе (там он может исчезнуть). Также прочитайте stackoverflow.com/tags/jsf/info. В вашем примере на github слишком много кода   -  person Kukeltje    schedule 30.12.2019
comment
теперь я обновляю вопрос   -  person qleoz12    schedule 30.12.2019
comment
1: код xhtml неполный (нет закрывающего тега) 2: Почему вы используете конвертер, у вас есть простые строки 3: Если уместно, где находится код конвертера   -  person Kukeltje    schedule 30.12.2019
comment
дайте мне время для обновления   -  person qleoz12    schedule 30.12.2019
comment
Нет проблем .. отлично, что вы ответили. Даже этот небольшой отзыв приветствуется, комплименты. Многие хранят молчание, что значительно снижает желание помогать в будущем.   -  person Kukeltje    schedule 30.12.2019
comment
привет, Kukeltje Я не очень хорошо разбираюсь в проверке, но я обновляю все вопросы, которые вы мне задавали ранее.   -  person qleoz12    schedule 31.12.2019
comment
Если это не удается как для mojarra, так и для myfaces, тег mojarra неверен, а общий тег jsf лучше (я изменил его). Если конвертер не имеет значения, удалите его из вопроса. И еще есть состав. Начинает ли он работать, если его удалить, то его содержание актуально. Если нет, также удалите его из кода и сделайте реальный минимально воспроизводимый пример ПОЖАЛУЙСТА, 8: это имеет значение ? Ошибки? Предупреждения? И если теперь вы знаете, что модель пуста, я предполагаю, что вы пытались удалить компонент списка выбора и просто поставить вместо него #{CompositeComponent.cities}? А вы пробовали посмотреть, вызывается ли геттер?   -  person Kukeltje    schedule 31.12.2019
comment
Именно так и поступили бы разработчики. Пожалуйста, расследуйте   -  person Kukeltje    schedule 31.12.2019
comment
Я закончил, я собираюсь обновить вопрос. спасибо за советы   -  person qleoz12    schedule 03.01.2020


Ответы (1)


проблемы

- Исправьте в xhtml имя компонента, имя компонента обычно начинается с нижнего регистра, для этого я изменил

value="#{CompositeComponent.cities}"

к этому

value="#{compositeComponent.cities}"

-для строк удалите конвертер, но для пользовательских объектов вы должны написать собственную реализацию конвертера, я поместил пример в свое репо в github.

Я тестирую два способа обработки аннотации JSF, а другие наполняют проект, вы должны выбрать один, не используйте оба, иначе у вас возникнет ошибка на этапе развертывания.

        <!-- javax.* APIs -->
    <!-- old way -->
    <dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>8.0</version>
    <scope>provided</scope>
    </dependency>
    <!-- end old way -->
    <!-- new way -->
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-atinject_1.0_spec</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-jcdi_2.0_spec</artifactId>
        <version>1.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-interceptor_1.2_spec</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-annotation_1.3_spec</artifactId>
        <version>1.0</version>
    </dependency>
person qleoz12    schedule 03.01.2020
comment
Спасибо за ответ и здорово, что вы решили это. Вы в конце концов пробовали работать в режиме разработки? Поскольку это дало бы вам прямые указания на эту первопричину. И ваш «новый путь» неверен. Если вы используете сервер java ee, нет необходимости добавлять jar-файлы спецификаций (api) в ваш проект непредусмотренным способом. «Старый путь» — это хороший путь. И эти jar-файлы не про аннотации JSF, они про инъекции (аннотации CDI). Используете ли вы jBoss 7.x (который не является сервером, совместимым со спецификацией java-ee) или jBoss 7.x EAP? - person Kukeltje; 03.01.2020
comment
О, и видите, ваш вопрос никоим образом не связан с «другим вопросом», как мы уже упоминали. - person Kukeltje; 03.01.2020
comment
Я использую Jboss EAP 7.2. - person qleoz12; 03.01.2020