связанные ссылки: 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));
}
}
вопрос А для 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
- оба вопроса связаны, потому что в какой-то момент в другом вопросе они могут решить проблему, но я слежу за всеми материалами, которые они сделали, но я не могу понять, да, оба вопроса похожи, у них есть небольшие отличия, но для меня это тот же сценарий
7: Если это не связано с мохаррой, удалите тег мохарры. 8: Запустите приложение jsf в режиме разработки JSF.
да, я пытаюсь устранить эту ошибку, тестируя с помощью мохарры или проверяя мои лица, чтобы не удалить тег мохарры.
#{CompositeComponent.cities}
? А вы пробовали посмотреть, вызывается ли геттер? - person Kukeltje   schedule 31.12.2019