【问题标题】:Spring Web Flow: Call bean's method as target actionSpring Web Flow:调用bean的方法作为目标动作
【发布时间】:2019-06-06 10:23:52
【问题描述】:

我有一个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 中的方法?

谢谢。

【问题讨论】:

  • 查看错误中的方法签名和代码中的方法签名。注意到区别了吗?
  • @Kukeltje 是的,但操作应该是flow.xml 中指定的操作。所以我相信这是对的,不是吗?
  • 不知道,我不使用这样的复杂设置。 JSF 有自己的“流程”,不需要像这些相对复杂的解决方案。但你的解决方案正是我的意思。

标签: java jsf spring-webflow


【解决方案1】:

最后,我解决了使用可以手动处理事件的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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2012-08-23
    • 2011-05-14
    • 2014-07-09
    • 2019-01-21
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多