Подтвердить что ты не робот

<f: ajax> Невозможно прикрепить <f: ajax> к non-ClientBehaviorHolder parent

При запуске приложения появляется следующая ошибка:

<f:ajax> Unable to attach <f:ajax> to non-ClientBehaviorHolder parent

Мой JSF:

    <h:commandButton id="submitschool" action="submit" value="Get templates" style="FONT-SIZE: medium;FONT-FAMILY: 'Rockwell';width : 128px; height : 24px;">
    <ui:repeat value="#{person.theImage}" var="item">
    <f:ajax event="change" render="image" />
    <h:graphicImage id="image" value="#{item}"/>
    </ui:repeat>
    </h:commandButton>

Я пытаюсь вернуть элементы в массив в представление, где "theImage" представляет собой массив в личном классе.

4b9b3361

Ответ 1

Тег <f:ajax> может быть непосредственно вложен в UIComponent, который реализует интерфейс ClientBehaviorHolder. <ui:repeat> не является одним из них.

Нажмите ссылку javadoc, она сообщит следующее:

Все известные классы реализации:

HtmlBody, HtmlCommandButton, HtmlCommandLink, HtmlDataTable, HtmlForm, HtmlGraphicImage, HtmlInputSecret, HtmlInputText, HtmlInputTextarea, HtmlOutcomeTargetButton, HtmlOutcomeTargetLink, HtmlOutputLabel, HtmlOutputLink, HtmlPanelGrid, HtmlSelectBooleanCheckbox, HtmlSelectManyCheckbox, HtmlSelectManyListbox, HtmlSelectManyMenu, HtmlSelectOneListbox, HtmlSelectOneMenu, HtmlSelectOneRadio

Из вашего вопроса не ясно, каковы ваши намерения, поэтому я не могу дать более конкретный ответ, чем рекомендовать избавиться от <f:ajax> в этом контексте. Это не принадлежит. Возможно, вы хотели поместить его прямо в <h:commandButton> (который имеет тип HtmlCommandButton), но тогда вам нужно изменить событие change, так как это не имеет смысла в <input type="submit">, сгенерированном <h:commandButton>.

Я думаю, вы также хотели бы переместить <ui:repeat> из <h:commandButton>, так как это также не имеет большого смысла. Поместите его рядом с <h:commandButton>, а не внутри него.