Jboss 使用 showcase 渲染选项列表时出错
Jboss Error picklist render using showcase
相关links:PrimeFaces PickList with OmniFaces validateAll leads to NullPointerException
这个问题与这个 link 类似,因为当我调试 picklistRender 时,我得到了之前 link 中显示的相同错误,相同的语法,但我正在阅读所有问题history 相关,Thomas Andraschko 建议是 mojarra 的问题,但我尝试使用 myfaces-version-22 和 myfaces-version-23 进行测试,我遇到了同样的问题
我试图弄清楚如何解决我的示例作品,如展示 p:picklist 但不是世界,正如文档所说,我尝试了几个选项,如
- 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 行,然后是 PickListRenderer 中的第 128 行:
encodeList(context, pickList, clientId + "_target", PickList.TARGET_CLASS, model.getTarget(),
pickList.getFacet("targetCaption"), pickList.isShowTargetFilter(), false);
期
与模型相关的 NPE var 在 encodeMarkup 中始终为 null,随后使用此模型调用 encodeList null。
DualListModel model = getModelValueToRender(context, pickList);
堆栈跟踪https://pastebin.com/wLKZWReg
- 这两个问题是相关的,因为在另一个问题中,他们可以解决问题,但我正在关注他们所做的所有事情,但我想不通,是的,这两个问题很相似,它们有一些小差异但对我来说是一样的场景
7:如果不是mojarra相关,请去掉mojarra标签。 8: 运行 你在JSF开发模式下的jsf应用。
是的,我正在尝试使用 mojarra 解决此错误测试或为此测试 myfaces 我没有删除 mojarra 的标签。
问题
-在 xhtml 上修复 bean 的名称 bean 的名称通常以小写字母开头,因为我 chabge
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>
相关links:PrimeFaces PickList with OmniFaces validateAll leads to NullPointerException
这个问题与这个 link 类似,因为当我调试 picklistRender 时,我得到了之前 link 中显示的相同错误,相同的语法,但我正在阅读所有问题history 相关,Thomas Andraschko 建议是 mojarra 的问题,但我尝试使用 myfaces-version-22 和 myfaces-version-23 进行测试,我遇到了同样的问题
我试图弄清楚如何解决我的示例作品,如展示 p:picklist 但不是世界,正如文档所说,我尝试了几个选项,如
- 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 行,然后是 PickListRenderer 中的第 128 行:
encodeList(context, pickList, clientId + "_target", PickList.TARGET_CLASS, model.getTarget(), pickList.getFacet("targetCaption"), pickList.isShowTargetFilter(), false);
期
与模型相关的 NPE var 在 encodeMarkup 中始终为 null,随后使用此模型调用 encodeList null。
DualListModel model = getModelValueToRender(context, pickList);
堆栈跟踪https://pastebin.com/wLKZWReg
- 这两个问题是相关的,因为在另一个问题中,他们可以解决问题,但我正在关注他们所做的所有事情,但我想不通,是的,这两个问题很相似,它们有一些小差异但对我来说是一样的场景
7:如果不是mojarra相关,请去掉mojarra标签。 8: 运行 你在JSF开发模式下的jsf应用。
是的,我正在尝试使用 mojarra 解决此错误测试或为此测试 myfaces 我没有删除 mojarra 的标签。
问题
-在 xhtml 上修复 bean 的名称 bean 的名称通常以小写字母开头,因为我 chabge
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>