Grails从0.6版本开始集成Spring的webflow功能。由于其简单的配置,化简了流程的开发。
我在自己的项目里用到了webflow,其实是个很简单的流程,图如下:
业务背景是这样的:商品售出后,有些商品坏了需要返修。先创建返修单,然后走返修流程。如果商品返修成功,则标识返修单已完成返修任务,退出流程;如果商品返修失败,则做相应的业务操作包括出货单中减去相应产品数量、利润表中减去相应的当天利润等等,最后退出流程。
下面显示的是流程的完整代码
def startFlow = {
def id = params.id
start{
on("success").to "endRepair"
on("failed").to "endFailed"
}
endRepair{
def repairProduct = RepairProduct.findById(id)
repairProduct.setFlag(true)
repairProduct.save()
}
endFailed {
def repairProduct = RepairProduct.findById(id)
def rg = new ReturnedGoods()
def productName = repairProduct.getProductName()
def modelNo = repairProduct.getModelNo()
def amount = repairProduct.getRepairNumber()
def time = repairProduct.getTime()
def reason = repairProduct.getReason()
def number = repairProduct.getNumber()
// 创建退货单
rg.setProductName(productName)
rg.setModelNo(modelNo)
rg.setAmount(amount)
rg.setTime(time)
rg.setReason(reason)
rg.setNumber(number)
rg.save()
def exportProduct = ExportProduct.findByTimeAndNumber(time,number)
if (amount == exportProduct.getAmount())
{
def amount1 = exportProduct.getAmount()
def outPrice = exportProduct.getOutPrice()
def inPrice = exportProduct.getInPrice()
def sellTime = exportProduct.getTime()
def pureProfits = (outPrice - inPrice)*amount1
def profit = Profit.findByPureProfitsAndSellTime(pureProfits,sellTime)
profit.delete()//删除利润
exportProduct.delete()
}
if(amount < exportProduct.getAmount())
{
def outPrice = exportProduct.getOutPrice()
def inPrice = exportProduct.getInPrice()
def sellTime = exportProduct.getTime()
def pureProfits = (outPrice - inPrice)*amount
def profit = Profit.findBySellTime(sellTime)
profit.setPureProfits(profit.getPureProfits()-pureProfits)
profit.save()
exportProduct.setAmount(exportProduct.getAmount()-amount)
exportProduct.save()
}
}
}
在grails中controller可以定义流程,必须以Flow结尾。并且该流程可以看成是普通的action,不过在视图中需要创建该流程的文件夹。以上面的代码为例,代码中的controller的名字为RepairProductController,则创建的视图为repairProduct/start/start.gsp endRepair.gsp endFailed
其中需要关注的是start/start.gsp 完整代码如下:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="layout" content="main" />
<title>返修流程</title>
</head>
<body>
<div class="nav">
<span class="menuButton"><g:link class="home" controller="management" action="main">返回主菜单</g:link></span>
<span class="menuButton"><g:link class="list" action="list">RepairProduct List</g:link></span>
</div>
<div class="body">
<h1>选择返修结果</h1>
<div style="margin-left:20px;width:60%;" mce_style="margin-left:20px;width:60%;" mce_style="margin-left:20px;width:60%;">
<g:form action="start">
<g:submitButton name="success" value="返修成功"/>
<g:submitButton name="failed" value="返修失败"/>
</g:form>
</div>
</div>
</body>
</html>
其中的action为start表示startFlow,而
<g:submitButton name="success" value="返修成功"/>
<g:submitButton name="failed" value="返修失败"/>
则是因为
start{
on("success").to "endRepair"
on("failed").to "endFailed"
}
通过 success 和 failed来跳转到各个相应的流程。
- 大小: 20.3 KB
- 大小: 13.1 KB
- 大小: 10.7 KB
- 大小: 9.2 KB
分享到:
相关推荐
grails快速开发web.pdf
Grails开发Web应用的入门建立兴趣的最佳教程。
Grails是一个full-stack框架,它借助于核心技术与相关的插件(plug-in)来解决Web开发中方方面面的问题,其中包括: 易于使用的基于Hibernate的对象-关系映射(ORM)层称为Groovy Server Pages (GSP)的表现层技术基于...
Grails入门好资料
Grails 中文 参考手册
当今的Java Web开发技术显得过于复杂,相对于它本身的需要来说。现在主流的Java Web框架也是异常复杂,而且没有很好的遵循 Don't Repeat ...本文档将带你从Grails入门开始,最终能够使用Grails框架建设Web应用程序。
自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。 我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。
自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。...我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。
grails 中文第二版
快速学会grails的中文文档,学会grails不再困难
Grails企业web应用开发与部署.pdf 很好的资源
grails中文参考手册 学习资料 groovy
Groovy_in_Action.pdf Groovy经典入门.pdf 使用Grails快速开发Web应用.pdf 在Eclipse里使用Grails类创建工具.pdf Programming Groovy. Dynamic Productivity for the Java Developer.pdf等一系列groovy资源
Grails1.1最新 中文 文档 当今的Java Web开发技术...Grails建立在这些概念之上,它极大地降低了在Java平台上建立Web应用的复杂性。与那些框架不同的是,Grails是构建在现有的像Spring、Hibernate这样的Java技术之上。
Grails Pjax插件Pjax在Grails中。 Pjax类似于(turbolinks)[ ,在'A'标签,按钮和表单上工作。 参见_pjaxHeader grails templtate文件中的演示代码。 ## Pjax是什么? Pjax是一个jQuery插件,它使用ajax和pushState...
关于grails企业web开发环境和部署的一些经验,和大家分享。
本教程介绍 Grails,这是一个搭建在动态语言 Groovy ...使用 Grails 可以提高 Web 开发的效率,降低 Web 开发的复杂度。本文 从 Grails 自动生成代码入手,以示例为中心逐步增加深度与难度,对 Grails 开发进 行演示。
grails 中文 API grails 中文 API
Grails Grails Grails Grails Grails