Nano Hash - криптовалюты, майнинг, программирование

jsf2 f: проблема рендеринга ajax в таблице данных

У меня есть таблица данных, и для каждой строки есть команда удаления ссылки, как показано ниже:

<h:dataTable value='#{glbProjectDtoList}' var='projectDto'
    binding='#{projectController.projectDataTable}' styleClass='display'
    id='tblProject' rowClasses='gradeA, gradeA'
    columnClasses='projectTableName, projectTableProgress, projectTableAction'>
    ......
    <h:commandLink
        action="#{projectController.delete(projectDto.projectId)}">
        <img class="btnDeleteProject mr5"
            src="#{request.contextPath}/resources/images/icons/dark/trash.png" />
        <f:ajax execute="@form"
            onevent="function(data) {deleteProjectEventHandler(data);}"
            render=":tblProject" />
    </h:commandLink>
    ......
</h:dataTable>

Функция удаления работает нормально, но вся таблица данных не перерисовывается, потому что действие вложено в таблицу данных или по какой-то другой причине?


Обновлять :

Это не работает, после удаления (:) выдается следующее исключение:

    javax.faces.FacesException: <f:ajax> contains an unknown id 'tblProject' - cannot locate it in the context of the component j_idt68

означает без (:), элемент должен быть в том же теге h:form.


Заранее спасибо.

-Корова

10.12.2012

  • попробуйте render="tblProject" или render="@form" вместо render=":tblProject" 10.12.2012
  • render=tblProject вызывает исключение с неизвестным идентификатором 'tblProject', render=@form не имеет смысла, поскольку datatable не в форме. 10.12.2012
  • каков полный идентификатор таблицы (просмотрите исходный код в браузере)? 10.12.2012
  • Ваша таблица, в конце концов, завернута в какой-то h:form, верно? 10.12.2012
  • это не так, у меня есть следующая структура.‹h:form›.button.‹/h:form›‹h:datatable›‹h:form›button‹/h:form›‹h:form›button‹/h:form ›...‹/h:datatable›, а кнопка в первой форме h: может отображать данные с помощью render=:tblProject, но кнопка внутри datatable не может. :( 10.12.2012
  • попробуйте вынуть h:form из таблицы и обернуть стол одним h:form... 10.12.2012
  • это не работает, после того, как я обернул данные с формой, только последнее действие кнопки запускало действие, означает, что если я хочу удалить какую-либо строку, всегда удаляется последняя. и render='tblProject' все еще не работает. 10.12.2012
  • Учитывая ваши странные проблемы с <f:ajax> в текущем и предыдущем вопросах, я думаю, что настройка вашего проекта JSF серьезно испорчена. Возможно, вы дублировали разные версии библиотек/реализаций JSF в пути к классам среды выполнения или что-то в этом роде. Или вы слишком много испортили classpath/buildpath проекта, в то время как вы должны держаться подальше от него. Я рекомендую начать чистый проект на основе разумной книги/учебника, в котором вы абсолютно уверены, что вы понимаете каждый шаг настройки проекта и написания кода. 11.12.2012

Ответы:


1

Удалите : перед идентификатором:

<f:ajax execute="@form" onevent="function(data) {deleteProjectEventHandler(data);}" render="tblProject"/>

Если идентификатор начинается с символа-разделителя (обычно :), компонент ищется от корневого компонента, в противном случае он ищется от следующего NamingContainer.

Дополнительную информацию см. в javadoc: UIComponent.findComponent

10.12.2012

2

Возможно, это происходит из-за того, что идентификатор таблицы данных не найден в корневом каталоге при обновлении состояния компонента.

Чтобы узнать точный идентификатор, по которому этот компонент присутствует в корневом каталоге, проверьте исходный код страницы и узнайте идентификатор, по которому отображается эта таблица данных.

Вам нужно использовать тот же идентификатор, что и в viewSource, чтобы позволить компоненту быть видимым в viewRoot при изменении состояния.

В качестве альтернативы, UIComponent.findComponent также поможет, и если ID, который вы указываете, верен, он вернет вам экземпляр UIComponent, иначе он вернет null.

10.12.2012
  • идентификатор точно «tblProject», но он сказал, что не может найти. 10.12.2012

  • 3

    У меня есть другой подход, используйте скрытую форму за пределами стола. Оно работает.

    Всем спасибо ;)

    11.12.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..