【问题标题】:Trouble Using Dynaform of primefaces extensions - jSF使用 Primefaces 扩展的 Dynaform 遇到问题 - jSF
【发布时间】:2012-09-06 10:41:27
【问题描述】:

集成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-extensions-0.5.1.jar

commons-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".

我错过了什么?

【问题讨论】:

    标签: jsf-2 primefaces primefaces-extensions


    【解决方案1】:

    更新一些代码后出现以下错误:

    javax.servlet.ServletException: Cannot find component with identifier "_mainForm_dynaFormGroup" referenced from "j_idt7:dynaForm:j_idt14".
    

    我错过了什么?

    正如消息所述,您正在引用 ID 为 _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>
    

    【讨论】:

    • 如果 buttonForm 在某个面板内,比如说 formPanel 那么它应该是:formPanel:buttonForm:button 吗?
    • @mashit 不,面板不是 HTML 的“容器”元素(我不知道确切的名称)。只有像表单或数据表这样的元素会附加一个 id ;-)
    • 好的。这个表达是什么意思? _mainForm_dynaFormGroup _mainForm_inputValues 参考:fractalsoft.net/primeext-showcase-mojarra/sections/dynaform/…
    • 问题是我无法使用_mainForm_dynaFormGroup _mainForm_inputValues. 可能我的页面上没有这些元素。但我使用的是参考页面上给出的示例。
    • @mashit 你可以尝试使用绑定。见my answer on another question
    【解决方案2】:

    您必须将以下内容添加到您的 web.xml 以使用 _ 而不是默认的 : 进行小部件匹配:

      <context-param>
          <param-name>javax.faces.SEPARATOR_CHAR</param-name>
          <param-value>_</param-value>
      </context-param>
    

    您还必须确保您正在查找的小部件位于给定的表单名称中。

    【讨论】:

    • 是的,我明白了在表单中查找元素的意义。谢谢你的答案。我错过了这个。我会试一试的。
    【解决方案3】:

    这是一个简单明了的答案,初学者可能会觉得很容易。 根据你的例外"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。 @siebz0r 上面已经很好地解释了这背后的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多