Spring Web Flow:将bean的方法作为目标操作

时间:2019-01-11 13:27:51

标签: java jsf spring-webflow

我有一个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>

在我定义的bean中:

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

按钮很简单:

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

当我按下包含action="myEvent"的按钮时,我得到了错误消息:

  

EL1004E:方法调用:在类型[...]上找不到方法onMyEvent()

那么,我的代码有什么问题?如何在某个事件中在bean中调用方法?

谢谢。

1 个答案:

答案 0 :(得分:0)

最后,我解决了使用org.springframework.webflow.engine.RequestControlContext可以手动处理事件的问题,如以下示例所示:

前端(调用bean的方法):

<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>