Spring Web 流程:调用 bean 的方法作为目标操作
Spring Web Flow: Call bean's method as target action
我有一个 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: Method call: Method onMyEvent() cannot be found on type [...]
那么,我的代码有什么问题?我如何在某些事件中调用我的 bean 中的方法?
谢谢。
最后,我使用可以手动处理事件的 org.springframework.webflow.engine.RequestControlContext 解决了问题,如下例所示:
前端(调用bean的方法):
<h:ajax event="rowSelect" listener="#{myBean.onMyEvent}" />
Bean(转发到 Spring Web 流处理程序):
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>
我有一个 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: Method call: Method onMyEvent() cannot be found on type [...]
那么,我的代码有什么问题?我如何在某些事件中调用我的 bean 中的方法?
谢谢。
最后,我使用可以手动处理事件的 org.springframework.webflow.engine.RequestControlContext 解决了问题,如下例所示:
前端(调用bean的方法):
<h:ajax event="rowSelect" listener="#{myBean.onMyEvent}" />
Bean(转发到 Spring Web 流处理程序):
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>