ID错误的复合组件中的JSF2.3方面

ID错误的复合组件中的JSF2.3方面,jsf,primefaces,facet,composite,Jsf,Primefaces,Facet,Composite,我在复合组件中有以下简单代码(使用Mojarra 2.3.9/Primefaces 7): 以下部分用于一个页面,试图用生命填充复合表单: 表单和所有子项都正确呈现,并且工作得很好。但在我看来,renderFacet块中的按钮有一个错误的客户端ID,原因不是: mySpecialForm:form:myBtn 该按钮仅获取以下clientId: mySpecialForm:myBtn 这将导致呈现页面时出错: 找不到引用自的表达式“@form”的组件 “mySpecialForm:myB

我在复合组件中有以下简单代码(使用Mojarra 2.3.9/Primefaces 7):


以下部分用于一个页面,试图用生命填充复合表单:


表单和所有子项都正确呈现,并且工作得很好。但在我看来,renderFacet块中的按钮有一个错误的客户端ID,原因不是:

mySpecialForm:form:myBtn

该按钮仅获取以下clientId:

mySpecialForm:myBtn

这将导致呈现页面时出错:

找不到引用自的表达式“@form”的组件 “mySpecialForm:myBtn”。: org.primefaces.expression.ComponentNotFoundException:找不到 引用的表达式“@form”的组件 “mySpecialForm:myBtn”

我是否做错了什么,或者这是JSF/Primefaces中的一个bug?我还尝试将componentType配置为从UIForm扩展而来的@FacesComponent,但在这种情况下,根本不会呈现任何表单

更新1: 我试图创建一个“最小的、可复制的示例(reprex)”,就像Kukeltje提到的那样。需要的只是web应用程序中的这两个部分(两个文件都在参考资料中):

cc/compForm.xhtml:


compFormTest.xhtml:


所有要做的事情就是调用.xhtml页面:http:localhost/YOUR_APP/compFormTest.xhtml

在使用它之后(至少在MojarraJSF实现中),输入字段具有以下正确的客户机ID mySpecialForm:form:inputParam。但是命令按钮检索表单之外的另一个客户机ID:mySpecialForm:myBtn,从我的角度来看,关于JSF VDL有什么缺陷:“……将在复合组件VDL视图中呈现。”

但是,当我仔细分析示例文件时,这显然不是primefaces的问题,因为如果使用标准的h:commandButton组件,也会包含错误的客户端ID

也许有人可以在MyFaces环境中使用上面提到的2个文件来检查行为是否不同或相同

或者有人在考虑解决问题吗?使用额外的@FacesComponent并将按钮从facet移动到表单下的右侧位置,会导致以下“有趣的”重复ID错误:


“无法两次添加相同的组件:mySpecialForm:form:myBtn”(至少客户端ID是我最初期望的)

您可以检查组件层次结构在DOM中的呈现方式吗?DOM树看起来与预期的一样。该按钮位于呈现的HTML页面中表单的下方:div(在cc之外)--->form-->div(actions)-->按钮HTML表单具有正确的客户端ID“mySpecialForm:form”。此外,呈现的输入字段(insertChildren)具有预期的客户端ID。如果我将按钮从facet直接移动到页面中的compositecomponent标记下,它也可以工作。但在这种情况下,我必须一次又一次地复制'n'粘贴actions DIV:(你能试试MyFaces中发生了什么吗?MyFaces和Mojarra对这种情况的解释不同。同样不确定什么是正确的行为,我们需要检查规范和规范问题。我试过了,但在WildFly环境中安装MyFaces确实很困难:(和?