Адрес компонента JSF в пользовательском интерфейсе: repeat - PullRequest
2 голосов
/ 14 марта 2012

Я пытаюсь обновить элемент внутри UI-repeat, но, к сожалению, я до сих пор не обнаружил, как правильно обращаться к outputPanel из dataTable.Мне известно, что эта проблема связана с различными контейнерами именования, но, тем не менее, я надеюсь, что будет решение.

<h:body>
    <h:form id="form">
        <ui:repeat var="_entry" value="#{test.entries}">
            <p:outputPanel id="counterPanel">
                <h:outputText value="#{test.counter}" />
            </p:outputPanel>

            <p:dataTable var="_p" id="paramTable" value="#{_entry.params}">
                <p:column headerText="Options">
                    <p:commandLink value="Update" update="counterPanel"  />
                </p:column>
            </p:dataTable>
        </ui:repeat>
    </h:form>
</h:body>

В приведенном выше примере кода возникает следующее исключение:

javax.servlet.ServletException: Cannot find component with identifier "counterPanel" in view.

Спасибо, Якоб

1 Ответ

5 голосов
/ 14 марта 2012

Два способа:

  1. Вам необходимо присвоить <ui:repeat> идентификатор клиента, чтобы вы могли ссылаться на него по пути абсолютного идентификатора клиента:

    <h:form id="form">
        <ui:repeat id="entries" var="_entry" value="#{test.entries}">
            <p:outputPanel id="counterPanel">
                <h:outputText value="#{test.counter}" />
            </p:outputPanel>
    
            <p:dataTable var="_p" id="paramTable" value="#{_entry.params}">
                <p:column headerText="Options">
                    <p:commandLink value="Update" update=":form:entries:counterPanel" />
                </p:column>
            </p:dataTable>
        </ui:repeat>
    </h:form>
    
  2. Переместите <h:form> внутрь внешнего цикла, чтобы вы могли использовать @form:

    <ui:repeat var="_entry" value="#{test.entries}">
        <h:form id="form">
            <p:outputPanel id="counterPanel">
                <h:outputText value="#{test.counter}" />
            </p:outputPanel>
    
            <p:dataTable var="_p" id="paramTable" value="#{_entry.params}">
                <p:column headerText="Options">
                    <p:commandLink value="Update" update="@form" />
                </p:column>
            </p:dataTable>
        </h:form>
    </ui:repeat>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...