是否可以将Spring bean注入Grails webflow?我尝试了以下
class CheckoutController {
ShoppingService shoppingService
def checkoutFlow = {
start {
action {
// This attempt to access the service doesn't work
flow.addresses = shoppingService.getOrder()
}
}
}
}
我可以从常规控制器操作中访问shoppingService
,但我无法通过Webflow的操作访问它(参见上文)。
答案 0 :(得分:1)
将以下内容添加到您的控制器:
def transient shoppingService
答案 1 :(得分:1)
在包含传统操作和Webflow的控制器中,Webflow的依赖注入存在问题。如果首先执行传统操作,它对我有用。
请参阅: GRAILS-7095 GRAILS-4141
Webflows还打破了混合控制器中 defaultAction 的概念。我发现第一个webflow获胜并成为默认操作。
单独使用 transient 可以防止您的服务在流状态之间进行序列化。 (例如,不必实现可序列化)
答案 2 :(得分:0)
起初我认为你列出的是伪代码,但我使用你的例子制作了一个示例应用程序并获得了NPE。我认为这可能是你的流程结构问题。 action
块应该处于流状态。您的流程定义应如下所示:
class CheckoutController {
ShoppingService shoppingService
def checkoutFlow = {
start {
action {
flow.addresses = shoppingService.getOrder()
if(flow.addresses) {
showForm()
}
else {
showError()
}
}
on("showForm").to "showForm"
on("showError").to "showError"
}
showError {
...
}
//etc.
}
}
您绝对可以在网络流程中使用注入的服务。我猜测问题在于你的流程结构。