Как получить доступ к родительскому контейнеру именования Composite?

У меня есть JSP 2.0 <ui:component>внутри это <p:dataTable> со столбцом, который использует Composite для визуализации специальной рамки для некоторого контента. Теперь мне нужно определить <p:dataTabe> в отображаемом атрибуте ajax, который находится в содержимом.

<ui:component>
  <p:dataTable id="dataTable" var="userItem" ... />
    <p:column>

        <my:borderBox id="borderBox">
           <p:commandButton
               action="#{userController.doDelete(userItem.id)}"
               value="delete" 
               update="?????"/>  <!-- How to address the dateTable? -->
        </my:borderBox>

      </p:column>
    </p:dataTable>
 <ui:component>

Мой BorderBox:

<html xmlns:composite="http://java.sun.com/jsf/composite" ...>
   <composite:interface>
      <composite:attribute name="styleClass" default="" type="java.lang.String"/>
   </composite:interface>

   <composite:implementation>
      <h:panelGroup ...>
         ...
         <composite:insertChildren/>
      </h:panelGroup>
   </composite:implementation>

Моя идея заключалась в том, чтобы использовать что-то вроде

update=":#{component.namingContainer.parent.namingContainer.clientId}:dateTable

Но component.namingContainer.parent швы должны быть нулевыми.

Когда я заменяю <p:commandButton> с этими заявлениями:

Parent ClientId 1: #{component}
Parent ClientId 2: #{component.namingContainer}
Parent ClientId 3: #{component.namingContainer.clientId}

Parent ClientId 4: #{component.namingContainer.parent}
Parent ClientId 5: #{component.namingContainer.parent.namingContainer}

Я получаю этот вывод:

Parent ClientId 1: javax.faces.component.html.HtmlPanelGroup@3d957419

Parent ClientId 2: javax.faces.component.UINamingContainer@23db9e8f
Parent ClientId 3: main_form:profilTabView:dataTable:0:borderBox

Parent ClientId 4:
Parent ClientId 5: 

Я понятия не имею, в чем проблема: возможно, моя идея идентифицировать список совершенно неверна или есть какая-то ошибка, или есть лучший способ? (Но я не могу использовать фиксированный абсолютный идентификатор для dateTable!)

Версии: Primeface 3.2, Мохарра 2.1.6 на Glassfish 3.1.2

1 ответ

У меня есть обходной путь для этой проблемы. Если вы не можете найти другое решение, вы можете использовать его в качестве альтернативы. Решение представляет собой смесь между JSF и Javascript. Для вашей таблицы вы определяете виджет (например, "myTable").

<p:dataTable id="dataTable" var="userItem" ...  widgetVar="myTable"/>

Это глобальная переменная javascript с именем "myTable". этот объект виджета содержит идентификатор. Для вашей командной кнопки (h:commandButton, а не p:commandButton) вы определяете событие onklick:

<h:commandButton id="deleteItem" action="#{userController.doDelete(userItem.id)}"
 value="delete" onclick="PrimeFaces.ab({formId:$(this).closest('form').attr('id'),source:this.id,process:'@all',update:myTable.id});return false;" /> 


formId - вы вводите идентификатор формы явно или используете мою функцию Jquery
обновление - myTable.id является идентификатором таблицы (в точности оболочка div)
процесс - @all, @this, @form и т. д.

Другие вопросы по тегам