在JSF2/PrimeFaces中命名容器

Waq*_*med 11 jsf primefaces

PrimeFaces中可能的命名容器有哪些?当我们想要在表单上更新某些UI控件时,为什么有必要为Ajax更新调用添加命名容器ID update=":mainForm:MainAccordian:userNameTextbox"

Man*_*uel 17

Prime面中可能的命名容器是什么

在JSF中,命名容器派生自UINamingContainer.

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

让我们说,<h:outputText value="test1" id="userNameTextbox" />如果<h:outputText value="test2" id="userNameTextbox" />您在页面中添加另一个,您将收到一条错误消息,表明您有一个重复的ID.您可以在JavaDoc中查找UIComponent.setId(String):

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

..此外,对你很重要:

指定的标识符在作为NamingContainer的最近的祖先UIComponent的后代的所有组件(包括facet)中必须是唯一的,或者如果没有这样的祖先是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>
Run Code Online (Sandbox Code Playgroud)

..并且您想要对userNameTextbox进行更新.您指的是哪个userNameTextbox,因为有3个?

第一个?然后更新userNameTextbox

第二个?然后更新container1:userNameTextbox

第三个?然后更新container2:userNameTextbox

  • 别客气.如果你的问题已被回答,那就标记答案. (2认同)

Mat*_*son 6

在IntelliJ扫描了我所有的JAR以获得javax.faces.component.NamingContainer此处的实现之后,我发现了:

从PrimeFaces 5.3起

  • 手风琴面板
  • 轮播
  • 数据网格
  • 数据清单
  • 数据滚动器
  • 数据表
  • 子表
  • 子检视
  • TabView
  • 树表
  • UIData
  • UITabPanel

来自MyFaces 2.1

  • HtmlDataTable
  • HtmlForm
  • UITree
  • UIForm


归档时间:

查看次数:

17970 次

最近记录:

9 年 前