Обновление JSF Ajax приводит к сбою commandLink при первом клике - PullRequest
7 голосов
/ 07 сентября 2010

На моей странице JSF у меня есть выпадающий список, который обновляет таблицу при выборе элемента этого выпадающего списка.

В таблице содержатся элементы со ссылкой для редактирования.

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

Вот xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <body>
        <ui:composition template="/template.xhtml">
            <ui:define name="windowTitle">Comment packages</ui:define>
            <ui:define name="content">
                <h3>Select the package to comment.</h3>
                <h:form prependId="false">
                    Section:
                    <h:selectOneMenu id="selectSection" value="#{platformService.currentSection}">
                        <f:ajax render=":list-packages" />
                        <f:selectItems value="#{platformService.releasePlatform.sections}" />
                    </h:selectOneMenu>
                </h:form>
                <p/>
                <h:panelGroup id="list-packages">
                    <h:dataTable id="packageList" var="package" value="#{packageService.packages}" border="1" >
                        <h:column>
                            <f:facet name="header">Package name</f:facet>
                            #{package.name}
                        </h:column>
                        <h:column>
                            <h:form>
                                <h:commandlink action="#{commentService.commentPackage}" value="Comment">
                                    <f:param name="packageName" value="#{package.name}" />
                                </h:commandLink>
                            </h:form>
                        </h:column>
                    </h:dataTable>
                </h:panelGroup>
            </ui:define>
        </ui:composition>
    </body>
</html>

Я также пытался использовать commandButton, но вам также нужно дважды нажать на кнопку.

Я использую JSF 2.0.1-FCS в Maven / Jetty.

Ответы [ 2 ]

4 голосов
/ 08 сентября 2010

Работает, когда вы кладете стол внутри одного <h:form>. Удалите внутреннюю <h:form> из колонки и замените <h:panelGroup id="list-packages"> на <h:form id="list-packages">.

Я не уверен, как / почему эта проблема вызвана (требуется больше времени для исследования), но это, вероятно, связано с тем, что состоянию таблицы важно знать, какая строка была выбрана.

2 голосов
/ 02 мая 2012

Скорее всего, эта проблема вызвана этой ошибкой JSF , когда у вас не может быть цели ajax, содержащей форму, которая обновляется из другой формы. Эта проблема рассматривается как проблема спецификации и отслеживается здесь . В отчете об ошибке есть обходной путь, включающий редактирование в jsf.js, если вам нравится жить на грани.

С использованием ajax и возможностью контролировать то, что отправляется на сервер с помощью execute =, я лично чувствую, что есть хороший аргумент для использования одной формы на страницу (за исключением редких случаев, таких как загрузка некоторых файлов и диалоговое окно реализации), и вы не попадетесь под легко забываемые ошибки именования контейнеров и такие проблемы, как эта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...