Как передать итеративный параметр через ajax в метод бэк-бина - PullRequest
0 голосов
/ 31 октября 2011

Итак, у меня есть dataTable, который выглядит следующим образом:

                <h:form>
        <h:dataTable value="#{backingBean.employeeLineItems}" var="emp">
            <h:column>
                <f:facet name="header">First</f:facet>
                #{emp.lastname}
            </h:column>
            <h:column>              
                <f:facet name="header">Last</f:facet>
                #{emp.firstname}
            </h:column>
            <h:column>
                <f:facet name="header">Actions</f:facet>
                <h:commandButton value="View Details"> 
                    <f:ajax execute="#{setCurrentEmployeeId(emp.id)}" render="employeeDetails"/> 
                </h:commandButton>
            </h:column>
        </h:dataTable>
                    <h:outputText value="#{backingBean.employeeDetails}" id="employeeDetails"/>
                </h:form>

Для каждой строки таблицы данных есть кнопка, которую я хочу, чтобы при щелчке ajax значение id employeeLineItem передавалось вметод, который устанавливает этот идентификатор в базовом компоненте, а затем отображает тег outputText с идентификатором employeeDetails (метод getEmployeeDetails будет использовать идентификатор employeeLineItem для получения нужного объекта сведений о сотруднике из базы данных, разумеется)

Мое решение не работает, кто-нибудь знает, что я делаю неправильно?

1 Ответ

2 голосов
/ 31 октября 2011
<h:commandButton value="View Details"> 
   <f:ajax execute="#{setCurrentEmployeeId(emp.id)}" render="employeeDetails"/> 
</h:commandButton>

Это неправильно.Атрибут execute <f:ajax> должен указывать на разделенную пробелами коллекцию идентификаторов клиентов компонентов, которые должны быть отправлены и обработаны на стороне сервера (так же, как вы указываете атрибут render с коллекцией компонентов, разделенных пробелами)идентификаторы клиента, которые должны быть обновлены / перерисованы после запроса ajax).В вашем конкретном случае это должен быть идентификатор таблицы данных или формы или просто @form для общей ссылки на родительскую форму.

Метод действия, в котором вы передаете идентификатор строки, должен быть определен вaction атрибут <h:commandButton> вместо этого.Итак, это должно сделать:

<h:commandButton value="View Details" action="#{backingBean.setCurrentEmployeeId(emp.id)}">
    <f:ajax execute="@form" render="employeeDetails"/> 
</h:commandButton>

(обратите внимание, что я исправил отсутствующее имя управляемого компонента в методе действия)

Кстати, вы знаете, чтоВы также можете просто передать целые объекты в качестве аргументов в EL?

<h:commandButton value="View Details" action="#{backingBean.setCurrentEmployee(emp)}">
    <f:ajax execute="@form" render="employeeDetails"/> 
</h:commandButton>

Таким образом, вам не нужно перезагружать сотрудника из БД.

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