как передать объект из richface Datatable в actionlistener - PullRequest
1 голос
/ 25 октября 2011

Я передаю объект из таблицы данных richface, например:

<rich:column>
<a4j:commandLink
value="Transfer inside Group" 
actionListener="#{adminBean.init_machineTransferInsideGroup}"
reRender="transferInsideGroupMachinePanel"
oncomplete="#{rich:component('transferInsideGroupMachinePanel')}.show()">
    <f:setPropertyActionListener
            target="#{adminBean.machineToChange}"
        value="#{Machineassg3}" />
    </a4j:commandLink>
<rich:column>

Что я ожидаю от кода выше, когда нажата ссылка на команду:

  1. назначить объект (Machineassg3) переменной бина (adminBean.machineToChange)
  2. затем вызов Actionlistener (init_machineTransferInsideGroup)
  3. после этой панели richmodal

Но шаги, которые происходят:

  1. Вызов слушателя действий (init_machineTransferInsideGroup)
  2. назначить объект (Machineassg3) переменной бина (adminBean.machineToChange)
  3. после этой панели richmodal

Как выполнить ожидаемые шаги (означает сначала назначить, а затем вызвать actionlistener)

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Вы должны выполнять деловую работу в action вместо actionListener.Слушатель действия намерен использовать автономную логику для подготовки / предварительной обработки реального бизнес-действия и / или записи чего-либо, не для выполнения бизнес-работы.

Итак, замените

actionListener="#{adminBean.init_machineTransferInsideGroup}"

от

action="#{adminBean.init_machineTransferInsideGroup}"

и удалите аргумент ActionEvent из метода init_machineTransferInsideGroup().Действие будет вызвано после того, как все слушатели действия (также <f:setPropertyActionListener> один) выполнят свою работу.

См. Также:

1 голос
/ 25 октября 2011

Вы можете получить переменную row с помощью ValueExpression.

Допустим, у вас есть в объявлении dataTable атрибут var="machine", затем в методе действия управляемого компонента вы можете получить примерно так:

FacesContext fCtx = FacesContext.getCurrentInstance();
ELContext elCtx = fCtx.getELContext();
ExpressionFactory ef = fCtx.getApplication().getExpressionFactory();
ValueExpression ve = ef.createValueExpression(elCtx, "#{machine}", Machineassg3.class);
machineassg3 = (Machineassg3)ve.getValue(elCtx);

Я не знаю фактический класс переменной machineassg3, поэтому у меня просто так было Machineassg3.

Надеюсь, это поможет.

...