1

我有这个有效的代码,虽然我希望它会失败。接收焦点的组件是,<p:inputText>所以我希望它的名字是custForm:panelGrid:name-id(以反映<p:inputText>组件在<p:panelGrid>组件中的嵌入)。然而,唯一有效的命名是custForm:name-id. 似乎有一些 PrimeFaces 组件没有在限定名称中“插入”它们的id 。如果是这样,记录在哪里?

<h:form id="custForm" styleClass="jsfcrud_list_form">
<script type="text/javascript">
  function primeFacesId()
  {
        var original = 'custForm:name-id';
        var idToSetFocus = PrimeFaces.escapeClientId(original);
        $(idToSetFocus).focus();
  }
</script>
<script>
    jQuery(document).ready(function() {
        primeFacesId();
    });
</script>
<p:panelGrid columns="10" style="width: 98%;margin-left: 1%;margin-right: 1%;" id="panelGrid">
    <h:outputLabel for="name" value="Name:" />
    <p:inputText   id="name-id" value="#{customerLController.nameDBConstraint}" label="name" />
        (...)

[我在公司防火墙后面,由于“SO 需要来自另一个域的外部 JavaScript”,我将在几天内无法接受任何答案]

4

1 回答 1

1

对于普通的 JSF,所有实现NamingContainer接口的组件都将它们的 id 作为前缀添加到容器内的所有组件中。这是例如h:formh:dataTable但不是h:panelGrid。您可以浏览Mojarra 的 API 文档以获取详细信息。

由于许多 Primefaces 组件都是从标准 JSF 组件派生的,我认为它们的行为是相似的。

更新:我在 3.2 版的 Primefaces 文档中发现了这一点:

JSF h:form、datatable、composite组件是命名容器,另外tabView、accordionPanel、dataTable、dataGrid、dataList、carousel、galleria、ring、sheet和subTable是实现NamingContainer的PrimeFaces组件。

At least for p:panelGrid this is not true (and can be verified in the html source of the PF showcase for the panelgrid).

于 2012-07-27T10:49:20.780 回答