麻烦使用primefaces扩展的Dynaform - jSF

时间:2012-09-13 10:54:14

标签: jsf-2 primefaces primefaces-extensions

我在整合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".

我错过了什么?

3 个答案:

答案 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。