目标:通过表单提交数据,并在页面显示
创建公用menu组件,将它应用到表烦页面
一、在表单中提交数据并显示
1、在(hot-deploy/hello/webapp/hello/)下创建hello.ftl,用来制作表单
parameters是ofbiz提供的一个java.util.Map内置对象,是请求参数的映射,以请求参数名和值为(key,value)
2、在点击提交后,根据action="/hello/control/test"发送请求,"test"作为uri,进入controller.xml,找相应的元素进行处理。
在hot-deploy/hello/webapp/hello/WEB-INF/controller.xml中增加一个新的<request-map uri="test">
3、在hot-deplot/hello/widget/HelloScreens.xml中,增加<screen name="testForm" >
<screenlet id="test">:标识名,处理响应的一个表单<form id="test" >,屏幕要引用一个.ftl文件,
就必须要用<platform-specific>标签,按上图的结构。
4、测试:
页面参数显示:嘿嘿
这里commin后,数据直接从parameters中取得并显示,下面的例子通过创建.groovy脚本文件,
数据在groovy中经过处理,以供.ftl取值。
5、在(/hot-deploy/hello/webapp/hello/WEB-INF/actions)下创建testForm.groovy文件
6、要让tsetForm.groovy起作用,需要在HelloScreens.xml中的<screen name="testForm">模式下配置其路径
<actions>元素包含了预处理动作,就是在执行<widgets>显示页面之前,先执行<actions>中的内容,
这里是先执行testForm.groovy脚本。
当终端用户点击提交表单,发送一个请求,根据controller.xml中<request-map>、<view-map>的配置,
调用“testForm”屏幕时,先执行完<actions>中的所有内容,之后再进入到<widgets>。
测试:
页面参数显示:赫赫
groovy:赫 赫
7、第二种方式制作表单提交
在(/hot-deploy/hello/widget/)下创建HelloForm.xml
在hot-deploy/hello/widget/HelloScreens.xml中的<screen name="testForm">模块下配置要显示.xml类型的表单,
需要在<widgets>中用<include-form>标签导入。
配置完之后,访问:https://localhost:8443/hello/control/test,我们看到hello.ftl和HelloForm.xml都显示在一个屏幕上,
这表示屏幕是由一个或多个在<widgets>中定义的元素组成的。
三、在这个应用中为屏幕创建公用的装饰器
1、在(路径:hello/widget/CommonScreens.xml)下创建CommonScreens.xml,这个文件包括公用screens,用来贯穿整个应用。
实际上这个公用装饰器也就是一个屏幕。这个屏幕分为2部分:
(1)<include-menu>导入一个菜单,指定location和name属性
(2)<decorator-section-include name="body"/>这是公用屏幕的“body”部分,当用到公用屏幕的时候,可以往“body”这个部分添加
2、根据hot-deploy/hello/widget/CommonScreens.xml中,<include-menu>location和name属性的设置,
在(/hot-deploy/hello/widget/)下创建HelloMenu.xml,定义一个菜单
<menu>:name=“MainAppBar” 菜单名
title= “” 菜单的标题
extends=“” 继承 extends-resource=“” 继承资源的位置
(这两个属性,Ofbiz已经定义好了,继承后只需简单配置,就可以用了)
<menu-item>:就是一个菜单项
3、把公用组件应用到其他页面上
为 hot-deploy/hello/webapp/hello/hello.ftl 增加公用组件,
到 hot-deploy/hello/widget/HelloScreens.xml 中修改配置
在这个<widgets>中,引入了公共屏幕,屏幕的第一部分是菜单,第二部分是一个“body”,
菜单在CommonScreens.xml中已经指定过了,<decorator-section name="body">就是设置第二部分"body"的内容,
这里把hello.ftl中<form id="test">的表单作为"body"导入。
测试: