JSF2/PrimeFaces 中的命名容器 [重复]

2024-03-01

PrimeFaces 中可能的命名容器有哪些?当我们想要使用以下命令更新表单上的某些 UI 控件时,为什么需要为 Ajax 更新调用附加命名容器 idupdate=":mainForm:MainAccordian:userNameTextbox"?


Primefaces 中可能的命名容器有哪些

在 JSF 命名容器中派生自UI命名容器 http://docs.oracle.com/javaee/7/api/javax/faces/component/NamingContainer.html.

当我们想要使用 update=":mainForm:MainAccordian:userNameTextbox" 更新表单上的某些 UI 控件时,为什么需要为 Ajax 更新调用附加命名容器 id

可以说,<h:outputText value="test1" id="userNameTextbox" />然后你添加另一个<h:outputText value="test2" id="userNameTextbox" />到您的页面,您将收到一条错误消息,表明您有重复的 ID。您可以在 JavaDoc 中查找UIComponent.setId(字符串) http://docs.oracle.com/javaee/7/api/javax/faces/component/UIComponent.html#setId%28java.lang.String%29:

设置此 UIComponent 的组件标识符(如果有)。组件标识符必须遵守以下语法限制: 不能是零长度字符串。 第一个字符必须是字母或下划线 ('')。 后续字符必须是字母、数字、下划线('') 或破折号 ('-')。

..此外,对您来说很重要:

指定的标识符必须是unique在作为最近祖先 UIComponent 的后代的所有组件(包括 Facet)中,该 UIComponent 是命名容器,或者在整个组件树的范围内(如果没有这样的祖先是 NamingContainer)。

意味着同一个 NamingContainer 下不能有两个具有相同 ID 的组件(如果根本没有 NamingContainer,则整棵树都算作 NamingContainer)。 因此,您需要添加一个 NamingContainer,例如<h:form id="myNamingContainer" />

让我们看下面的例子:

<h:outputText value="test1" id="userNameTextbox" />
<h:form id="container1">
  <h:outputText value="test2" id="userNameTextbox" />
</h:form>
<h:form id="container2">
  <h:outputText value="test3" id="userNameTextbox" />
</h:form>

..并且您想要更新用户名文本框. Which 用户名文本框你指的是因为有3个吗?

第一个?然后更新用户名文本框

第二个?然后更新容器1:用户名文本框

第三个?然后更新容器2:用户名文本框

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSF2/PrimeFaces 中的命名容器 [重复] 的相关文章

随机推荐