我在整合primefaces-extensions dynaform
时遇到以下错误java.lang.NullPointerException
at org.primefaces.extensions.component.dynaform.DynaFormRenderer.preRenderLabel(DynaFormRenderer.java:280)
at org.primefaces.extensions.component.dynaform.DynaFormRenderer.encodeMarkup(DynaFormRenderer.java:99)
at org.primefaces.extensions.component.dynaform.DynaFormRenderer.encodeEnd(DynaFormRenderer.java:78)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
我的类路径中包含以下库,如here
所述primefaces-3.3.1.jar
primefaces的扩展-0.5.1.jar
公地lang.jar
Xhtml看起来像
<ui:composition template="WEB-INF/templates/base.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions">
<ui:define name="content">
<pe:dynaForm id="dynaForm" >
</pe:dynaForm>
</ui:define>
</ui:composition>
更新:
在更新某些代码后得到以下错误:
javax.servlet.ServletException: Cannot find component with identifier "_mainForm_dynaFormGroup" referenced from "j_idt7:dynaForm:j_idt14".
我错过了什么?
答案 0 :(得分:2)
在更新某些代码后得到以下错误:
javax.servlet.ServletException: Cannot find component with identifier "_mainForm_dynaFormGroup" referenced from "j_idt7:dynaForm:j_idt14".
我错过了什么?
正如消息所示,您正在引用标识为_mainForm_dynaFormGroup
的元素。找不到此元素。导致此问题的一个常见原因是此元素位于一个表单或其他容器中,该容器在元素id前面加上容器的id。
例如有这个JSF:
<h:form id="form">
<div id="div" ...
</h:form>
将生成此HTML:
<form id="form">
<div id="form:div" ...
</form>
在引用另一个容器中的元素时,您需要使用:
作为前缀在根目录开始引用。
<h:form id="buttonForm">
<p:button id="button" ...
</h:form>
<h:form>
<p:button update=":buttonForm:button" ...
</h:form>
答案 1 :(得分:1)
您必须将以下内容添加到您的web.xml中,以使用_
代替默认:
进行小部件匹配:
<context-param>
<param-name>javax.faces.SEPARATOR_CHAR</param-name>
<param-value>_</param-value>
</context-param>
你还必须确保你正在查找的小部件驻留在给定的表单名称中。
答案 2 :(得分:0)
这是一个直接的答案,初学者可能会觉得这很容易。
根据您的例外"javax.servlet.ServletException: Cannot find component with identifier "_mainForm_dynaFormGroup" referenced from "j_idt7:dynaForm:j_idt14""
您从dynaForm而不是_mainForm_dynaFormGroup
引用dynaFormGroup
,因为您的dynaform
不在任何容器内。
以下是另一个示例Cannot find component with identifier "_mainForm_dynaFormGroup" referenced from "A4759:projectTab:dynaForm:j_idt581".
我在_mainForm_dynaFormGroup
引用_projectTab_dynaForm
_mainForm_dynaForm
_projectTab_dynaFormGroup
,{{1}}必须是{{1}}。上面的原因很好地解释了@ siebz0r。