`
fengzhizi715
  • 浏览: 161636 次
  • 性别: Icon_minigender_1
  • 来自: 上海 苏州
社区版块
存档分类
最新评论

Grails中使用webflow

阅读更多

   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
分享到:
评论
2 楼 copoplar 2009-09-24  
很不错,学习了!
1 楼 supersnake 2009-08-09  
学习ing 

相关推荐

    grails快速开发web

    - **实战技巧**:包括 GORM (Groovy Object Relational Mapping) 的使用、如何在 Grails 中实现 Ajax 功能、处理遗留数据库的方法、利用遗留框架以及如何在 Grails 中使用 WebFlow。 - **高效编程系列**:涵盖使用 ...

    grails中文入门简介

    它还包含了Groovy Server Pages(GSP),这是一种基于Groovy的模板引擎,它允许开发者在页面中使用Groovy脚本。GSP标签库丰富,涵盖了数据绑定、表单处理、页面布局等多个方面。Grails的URL映射系统使得可以灵活地将...

    Grails 中文参考手册

    - **使用IDE**:Grails支持多种集成开发环境(IDE),如IntelliJ IDEA和Eclipse,方便开发者编写和调试代码。 - **规约配置**:Grails遵循一定的约定,例如文件组织和命名规范,以提高开发效率。 - **运行和测试...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    12.2 在Grails中使用Spring 158 12.3 本章小结 160 第13章 深入Controller 161 13.1 Controller中常用的属性与方法 161 13.2 自定义URL Mapping 164 13.3 Web Flow 167 13.4 本章小结 172 第14章 深入Groovy ...

    grails和groovy的电子书-4

    Grails中使用GSP标签和布局(如SiteMesh布局)来定义视图,使得视图层的设计更加直观和动态。 3. **控制器(Controller)**:控制器是MVC架构中连接模型和视图的中介。它处理用户的输入,调用模型层的数据,并决定...

    Spring攻略(第二版 中文高清版).part2

    6.2 在你的Servlet和过滤器中使用Spring 214 6.2.1 问题 214 6.2.2 解决方案 215 6.2.3 工作原理 215 6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4...

    Spring攻略(第二版 中文高清版).part1

    6.2 在你的Servlet和过滤器中使用Spring 214 6.2.1 问题 214 6.2.2 解决方案 215 6.2.3 工作原理 215 6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4...

    Spring Recipes: A Problem-Solution Approach, Second Edition

    * Spring web: Spring MVC, Spring Web Flow 2, Spring Roo, other dynamic scripting, integration with popular Grails Framework (and Groovy), REST/web services, and more. This book guides you step by ...

    Spring攻略(第二版)高清版.pdf

    书中还提到Spring框架的周边技术,包括Spring Batch用于批处理任务,Spring Web Flow用于管理Web应用中的复杂导航流程,以及Spring Security用于安全控制。Spring AOP(面向切面编程)也是书中讲解的重点,通过它,...

    spring-tool-suite-3.8.1.RELEASE-e4.6-win32-x86_64.zip

    1. **Spring项目创建向导**:快速创建Spring Boot、Spring MVC、Spring Web Flow等不同类型的项目模板。 2. **Spring配置编辑器**:提供图形化界面,帮助开发者直观地管理和编辑Spring配置文件(如application.xml)...

    spring-tool-suite-3.6.1.RELEASE-e4.4-win32-x86_64.zip

    1. **Spring项目向导**:允许用户快速创建Spring Boot、Spring MVC、Spring WebFlow等项目的初始结构。 2. **Spring配置编辑器**:提供XML配置文件的语法高亮、代码提示和错误检查,使配置工作更加直观。 3. **...

    SpringOne-Using Spring Security 2

    - 流授权(通过Spring Web Flow) #### 它与其它工具的良好集成 - **Spring Portfolio**:与Spring框架家族其他组件协同工作; - **AspectJ**:面向切面编程的支持; - **JA-SIG CAS**:支持校园网单一登录标准; ...

    Persion-wfc-lw:wfc 和 lw 添加 java&Android 项目

    标题 "Persion-wfc-lw:wfc 和 lw 添加 java&Android 项目" 暗示了一个关于集成WFC(Web Flow Component)框架和轻量级框架(lw)的开发项目,其中涉及到Java后端和Android移动端的开发。在这个项目中,开发者可能在...

Global site tag (gtag.js) - Google Analytics