Spring Web Flow: вызов метода бина как целевого действия - PullRequest
0 голосов
/ 11 января 2019

У меня есть приложение JSF + Spring Web Flow, и я хотел бы перейти от одного представления к другому, используя метод, определенный в bean-компоненте представления.

Итак, мой файл flow.xml выглядит следующим образом:

<flow ...>
     <var name="myBean" class="mypackage.myclass" />
     <view-state id="list">
         <transition on="myEvent" to="#{myBean.onMyEvent()}"
     </view-state>
</flow>

В бобе, который я определил:

public String onMyEvent(final SelectEvent event) {
    //Do something
    return "input";
}

Кнопка просто:

<h:commandButton id="myButton" action="myEvent" ajax="false" value="myButton" />

Когда я нажимаю кнопку, содержащую action="myEvent", я получаю сообщение об ошибке:

EL1004E: Вызов метода: метод onMyEvent () не может быть найден для типа [...]

Итак, что не так с моим кодом? Как я могу вызвать метод в моем бине на каком-то событии?

Спасибо.

1 Ответ

0 голосов
/ 14 января 2019

Наконец, я решил использовать org.springframework.webflow.engine.RequestControlContext , который может обрабатывать событие вручную, как в следующем примере:

Внешняя сторона (вызов метода бина):

<h:ajax event="rowSelect" listener="#{myBean.onMyEvent}" />

Bean (переходит к обработчику Spring Web Flow):

public void onMyEvent(final SelectEvent event) {
    // Fill the bean for next view
    final RequestContext requestContext = RequestContextHolder.getRequestContext();
    requestContext.getFlowScope().put("nextBean", nextBean);
    final RequestControlContext rec = (RequestControlContext) requestContext;
    rec.handleEvent(new Event(this, "myEvent")); // the action managed by Spring Web Flow
}

И, наконец, в flow.xml (управление переходом к следующему виду)

<view-state id="myView">
    <transition on="myEvent" to="nextView" />
</view-state>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...