1. 介绍与开始

1.1. 简介

金色站点是面向市场提供快速建立WEB站点的平台。金色站点的终旨是快速响应,随需应变!在这里,我们的产品将提供尽可能少的开发和维护成本以在当今信息和技术社会里,让使用金色站点的每一位客户都能在“时间就是金钱”的互联网之中脱颖而出!

使用金色站点平台的产品具有以下突出特点:

1) 所有100%页面和文字可在后台修改和即刻生效,无需重新部署和重启系统和软件!

2)一般添加和修改功能和页面,也无需重新部署和重启系统和软件。

3)页面(甚至处理器代码)存储于数据库,集群部署,一处更改,处处更改。

4)创建任意数据表后,无需开发编写增删改查功能,系统自带动态SQL查询设计器和数据操作工具。

5)结合GoldData金色数据,将软件和数据融合到一起,给网站添加无限魅力!

6)金色数据基于Java/Groovy语言开发,安全和高效!

7) 支持在线实时添加和修改i18n信息和文字,支持任意多国语言

1.2. 下载和安装

当前软件版本:1.0.2

下载地址: 1.0.2 最新版

下载金色站点软件后,可通过解压文件查看到软件文件。文件目录大致如下:

bin/        //脚本目录
   db_upgrade.bat          //数据库升级
   db_upgrade.sh
   goldadmin_passwd.bat   //重置管理员密码脚本
   goldadmin_passwd.sh
   setclasspath.bat
   setclasspath.sh
   setenv.bat
   setup.bat            //安装或创建项目脚本
   setup.sh
   theme_change.bat     //更改项目皮肤脚本
   theme_change.sh
   theme_make.bat       //制作皮肤脚本
   theme_make.sh
   theme_zip.bat         //打包皮肤脚本
   theme_zip.sh
src/               //创建项目所在路径
themes/            //操作皮肤所在路径
libs/
    templates/
    install-guide.jar
    theme.groovy
README.md    //说明文件

1.3. 运行环境

本软件需要JRE1.8及以上运行环境,JRE软件可以从 Java官网 下载。

本软件基于Java语言,所以可运行在Windows、Linux、Mac等操作系统上。

目前金色站点的数据库是基于MySQL数据库,所以你还需要准备一台可连接的MySQL数据库。如果你还没有,那么可到MySQL官网下载 : MySQL官网

当前版本软件使用gradle3.5 作为构建工具,因此你还需要从 Gradle官网下载

当前版本软件是在grails3.3.2开发,因此你还需要从 Grails官网下载

具体Java以及MySQL下载和安装,可以看咐录。

1.4. 创建您的项目

首先进入bin目录,双击运行setup.bat文件,启动安装程序,可以看到安装画面如下:

setup.bat

首先,选择安装语言,默认中文,按回车键就可以进行下一项。

然后提示输入项目名称,项目名称,请使用英文字母或数字来命名。然后再是站点名称,即项目网站名称。

接下来,则需要你配制GoldSite数据库连接,如下图所示:

setup_step2

如果MySQL连接成功,但数据库不存在时,则会询问是否创建,如果输入 'y',则会创建数据库。如下图所示:

setup_step3

接下来,需要配制项目默认使用的服务端口号,以及超级管理员密码。如下图所示:

setup_step4

在这一步过后,将会在项目的src路径下创建相应的项目。并将数据库脚本导入到数据库当中。如下图所示:

setup_step5

最后会询问是否设置皮肤,可以选择否跳过,待到之后运行bin/theme_change.bat进行替换。

至此金色站点创建项目程序已经结束。

1.5. 运行项目

进入$GOLDSITE_HOME 下的src目录,可以看到新创建的项目,进入项目,我们可以看到这是一个grails程序。如下图所示:

run1

然后,打开命令行,输入grails run-app,即可启动程序。

run2

打开浏览器访问http://localhost:8080/,访问项目站点首页,如下图所示:

run3

以及打开浏览器访问http://localhost:8080/mana,访问项目后台,如下图所示:

run4

1.6. 皮肤管理

1.6.1. 制作皮肤

进入$GOLDSITE_HOME/bin/下,打开命令行,运行theme_make.bat 命令,如下所示:

theme_make.bat <static files location>

示例如下:

make1

如上图所示,需输入语言,以及MySQL连接参数。然后将会在$GOLDSITE_HOME/themes/下创建皮肤项目black。如下图所示:

make2

然后我们就可以开始制作皮肤了。制作皮肤大概有下面这几步:

1.把用作布局的html页面放入$GOLDSITE_HOME/themes/black/grails-app/views/themes/black/layouts

2.再把其它的html页面则放入$GOLDSITE_HOME/themes/black/grails-app/views/themes/black/tpls

3.在$GOLDSITE_HOME/themes/black/grails-app/views/themes/black/目录下,打开命令行,运行groovy html2gsp.groovy 。这一步将会把html文件变为gsp文件。

4.编辑布局下的gsp文件。比如gsp文件中的body目录下的有共通用的内容保留,将不通用的内容使用<g:layoutBody/>替换。

5.编辑tpls下的gsp文件。比如将gsp文件head中的meta,及link,style,script删除,但加上<meta name="layout" content="<layout name>">,并将body元素下的共通部分去掉。与布局下的gsp文件形成完整的内容。

6.在目录$GOLDSITE_HOME/themes/black/下打开命令行,运行grails run-app,然后打开首页查看页面显示是否正确。

1.6.2. 打包皮肤

进入$GOLDSITE_HOME/bin/下,打开命令行,运行theme_zip.bat 命令,如下所示:

theme_zip.bat <the name of one theme project>

运行之后,将会在$GOLDSITE_HOME/themes/下,生成一个zip文件。

示例如下:

zip1
zip2

1.6.3. 上传皮肤到Github

要将创建皮肤 上传到github,共享给他人使用。 需要以下几个步骤,如下所示:

1.需要将皮肤zip文件解压,然后使用`git init`来初始化仓库。

2.使用git add . 以及git commit -m "create theme <name>"提交代码到仓库中。

3.登录Github.com,创建仓库。

4.在项目下运行git remote add origin <github repository url above>,添加远程仓库

5.运行git push -u origin master 命令,将项目推送到github.com网站上。

1.6.4. 切换皮肤

要切换皮肤,或者安装新皮肤到项目里, 需要以下几个步骤,如下所示:

1.进入$GOLDSITE_HOME/bin下,打开命令行,运行theme_change.bat,如下图所示:

themechange1

在上图中,我们需要切换皮肤的项目完整路径。另外还会询问是否删除项目中原有皮肤。如果不需要原有皮肤,选择删除即可。

2.接下来,程序需要你选择皮肤地址。这个皮肤地址,可以是本地或者网络zip文件,也可以是本地文件夹,也可以是github皮肤项目地址,如下图所示:

themechange2

3.如果是网络地址,则还需要你输入皮肤名称。

4.接下来,将会把皮肤文件导入到项目各目录下。完成皮肤切换。

1.7. 后台登录

在之前创建的项目里 创建您的项目 ,运行之后,登录后台 'http://localhost:8080/mana', 输入超级管理员帐号"admin",以及安装时所设置的密码,以及验证码进行登录。如果前述输入正确,则进入主页。如下图所示:

home1
如果登录时,勾选了“自动登录”选项,则下次打开地址时,将不用再进行登录,会自动进入主页。这个功能请不要再公共机器上使用。

1.8. 退出登录

主界面右上角,点击您的用户名,将弹出菜单,里面有个"退出"按扭。点击它后,将会退出登录!如下图所示:

logout

1.9. 许可证

金色站点平台,可以不用购买许可证免费使用临时许可证。当然也非常感激您去官网 https://goldsite.100shouhou.com 上购买许可证。

在这里我们将介绍申请临时许可证的步骤和用法。如下所示:

1.打开地址 https://goldsite.100shouhou.com/price ,然后点击“获取临时许可证”,如下图所示:

license1

这时将进入许可证获取页面。如果此时未登录,则会提示先登录。如下图所示:

license2

那么,你将需要登录。如果已经登录,则输入验证码,即可获取临时许可证。如下图所示:

license3

当你已经购买了许可证时,请到主界面注册许可证。

有关许可证的操作,都需要你使用超级管理员帐号"admin"才能操作。

1.9.1. 注册许可证

主界面右上角,选择“帮助”,将弹出菜单。

license4

选择其中的“注册”,将弹出注册许可证对话框。如下图所示:

license5

请将代码,以及密钥,然后点击“好”进行注册。如果代码以及密钥输入正确,那么将提示注册成功!底部状态栏许可证无效字样的提示将消失。

1.9.2. 注销许可证

当你想在另外一台机器上安装金色站点,并且想将许可证转移过去,那么你可能需要从当前机器上注销该许可证,特别是你购买的许可证只允许一台机器使用的情况下。注销许可证很简单。

主界面右上角,选择“帮助”,将弹出菜单。

license4

选择“注销本机许可证”,将会弹出“确认注销许可证”提示。选择“好”即会注销。

2. 呈现管理

在本章中,将就呈现功能进行介绍。这里会涉及到菜单管理,页面管理,栏目管理,操作管理。 如下图所示:

menu1

2.1. 菜单管理

菜单管理,主要是对网站一级菜单做管理。该功能在很多情况下是可选的。如下图所示:

menu1

2.1.1. 添加/修改管理

添加菜单,需要填入名称,访问地址(也即网址)信息,以及顺序信息。顺序以数字为内容,如"1"。在这三项中,名称与访问地址是必须要填写的。如下图所示:

menu2

修改菜单亦如此。

2.1.2. 删除菜单

回到菜单列表页面,点击要删除那行的"删除"按扭。这时将会出现删除确认框,选择"好",则将会彻底删除,否则什么也不会做。

2.1.3. 更改状态

如果将菜单更改成"不可用"状态,该菜单将会对用户隐藏。

2.2. 页面管理

页面管理,一般是指有访问地址的页面。但页面内容类型可能是HTML,或者是JSON。

page1

2.2.1. 添加/修改页面

在添加和修改页面里,有很多字段需要填写,在下面将会一一介绍。首先看截图如下:

page2

字段说明如下:

菜单:是指该页面所属的菜单。

访问路径: 是指访问该页面的路径。

名称:页面名称。

显示标题: 页面显示标题,可以使用EL表达式,请参考 页面显示标题EL表达式。在页面中可以使用$title来引用。

类型:页面类型。页面类型分为"普通","数据表"。选择该项之后,要填写的字段将会有所变化。如果页面类型选择为"数据表",请参考下一节。

脚本:即JavaScript脚本,对于脚本变量,请参考 脚本变量

模板类型:类型分为"没有模板","文件模板","数据库模板"。当没有模板时,则输出转为JSON,这一般都是用作接口才这样。 当为文件模板,则会让选择文件。当为"数据库模板"时,则会显示模板编辑框,这时意味着模板,可以随时更新。

状态:当为"可用状态"时,页面才会呈现给用户,当为"不可用状态"时,用户将访问不到该页面。

顺序:整数数字即可。

当页面为数据表时字段如下:

page3

返回类型:分为"分页","单个"。分页意味返回是个分页列表,另外还让你填写分页大小,如果不填,默认是10。

数据表:选择数据表,该下拉框将从数据库里将表都会拉下来供选择,除了以"$"开头的表。

条件: 填写查询条件。可以使用辅助工具,打开条件编辑器来编辑SQL。编辑好之后,选择"解析参数",将会把条件参数解析出来(注:条件参数名称是可以改的)如下图所示:

page4

隐藏表列:哪些列不用后续使用,特别是页面只返回JSON数据时,特别有用。要隐藏多个表列,则请英文逗号相隔。

排序字段:例如:"age desc,date_created desc",多个排序字段,请以英文逗号相隔。

后续脚本: 则中是指上述以已经查询结果后,然后再由后续脚本执行一段处理。具体请参考 页面后续脚本变量

2.2.2. SEO优化

在线SEO优化,是金色站点提供的一项特别有用的功能。由于金色站点所有页面都可以在线编辑,因此,做起SEO优化是一个很简便的事情。

要使用页面优化,要记得布局里必须要留有以下内容:

<g:render template="/themes/${application.$theme}/layouts/meta1"/>
    <title><g:layoutTitle default="GoldSite"/></title>
    <meta charset="utf-8" />
<g:render template="/themes/${application.$theme}/layouts/meta2"/>

在页面列表中,选择想要编辑页面那行的"SEO优化",将会打开元数据列表,如下图所示:

page5

添加/修改元数据

page6

是否标题之后: 则表示该元数据是否出现在标题之后。

属性名:元数据属性名称,下拉框里列出一些常用的属性名,比如,name,property,'http-equiv'。当然你也可以自定义。

属性值:填写该元数据属性的值。

内容:则表示该元数据具体内容。

在下面的描述,则详细列举了一些常用的元数据,如一图所示:

page7

删除元数据

在元数据列表上,直接选择想要删除行的"删除"链接。然后将会弹出删除确认框,如果选择"好",将会彻底删除。

2.2.3. 编辑内容

如果页面是普通页面,则编辑内容,是指编辑页面内容。如果页面是数据表类型,那么编辑内容是指,数据项置顶。在下面将以数据项置顶举例子。

首先,点击数据表类型页面那行的编辑内容,将会打开页面置顶页面,如下图所示:

page8

添加置顶

选择"添加"按扭,则进入选择条目页面。然后选择要选中的行,将会弹出确认框,进行确认。如下图所示:

page9

删除置顶

在置顶列表页面,选择想要删除的数据行的删除链接。然后将会弹出确认框,确认即可。

编辑置顶顺序

在置顶列表页面,选择想要编辑的行,选择"编辑顺序"。然后将会弹出输入框,输入一个整数数字即可。然后提交,便可以编辑顺序成功。

2.2.4. 删除页面

在页面列表中,选择想要删除的数据行的删除链接。然后将会弹出确认框,确认即可。

2.3. 栏目管理

在金色站点里,一个页面里可以有无数个栏目组成,一个栏目还可以嵌套多个子栏目。打开栏目列表,如下图所示:

col1

2.3.1. 添加/修改栏目

在添加和修改栏目里,有很多字段需要填写,在下面将会一一介绍。首先看截图如下:

col2

名称:栏目名称,可以下拉弹出菜单,选择一个,当然也可以自定义。

显示名称:栏目的显示名称。

类型: 可以分为"静态页面","自由列表","数据表"。当为自由列表时,会多出一个"数量"字段,是指列表数量。 对于类型为数据表时,则会多出很多字段,将会在后面详细介绍。

模板内容:可以使用编辑器进行编辑,在编辑器上面,可以"选择模板",这样方便进行更改。

状态:可以是"可用"和"不可用"状态。当状态为"不可用"时,该栏目将对用户不可见或者是隐藏。当状态为"可用" 时,栏目将对用户可见!

类型为数据表的栏目

col3

返回类型:分为"列表","单个"。列表意味返回是个列表,另外还让你填写列表大小,如果不填,默认是10。

数据表:选择数据表,该下拉框将从数据库里将表都会拉下来供选择,除了以"$"开头的表。

条件: 填写查询条件。可以使用辅助工具,打开条件编辑器来编辑SQL。编辑好之后,选择"解析参数",将会把条件参数解析出来(注:条件参数名称是可以改的)如下图所示:

page4

隐藏表列:哪些列不用后续使用。要隐藏多个表列,则请英文逗号相隔。

排序字段:例如:"age desc,date_created desc",多个排序字段,请以英文逗号相隔。

后续脚本: 则中是指上述以已经查询结果后,然后再由后续脚本执行一段处理。具体请参考 栏目后续脚本变量

2.3.2. 编辑内容

如果栏目是静态页面,则编辑内容,是指编辑呈现内容。如果页面是自由列表,则编辑的是自由列表内容。如果栏目是数据表类型,那么编辑内容是指,数据项置顶。

自由列表

在栏目列表里,选择"编辑内容"链接,将打开自由列表页面。如下图所示:

col4

添加/修改自由列表

在自由列表页面里,点击"添加"按扭或"修改"链接。将会看到以下表单,如下图所示:

col5

名称:链接名称。

链接:链接URL

图片链接:图片链接URL

顺序:整数数字。

删除自由列表项

在自由列表页面里,点击相应行的"删除"链接。将会出现确认框,点击"好",将会彻底删除该项。

数据表

在下面将以数据项置顶举例子。

首先,点击数据表类型页面那行的编辑内容,将会打开页面置顶页面,如下图所示:

page8

添加置顶

选择"添加"按扭,则进入选择条目页面。然后选择要选中的行,将会弹出确认框,进行确认。如下图所示:

page9

删除置顶

在置顶列表页面,选择想要删除的数据行的删除链接。然后将会弹出确认框,确认即可。

编辑置顶顺序

在置顶列表页面,选择想要编辑的行,选择"编辑顺序"。然后将会弹出输入框,输入一个整数数字即可。然后提交,便可以编辑顺序成功。

2.3.3. 删除栏目

在栏目列表页面,选择想要删除的数据行的删除链接。然后将会弹出确认框,确认即可。

2.4. 操作管理

操作管理,就相当于是一个函数管理平台。有相应的URL,然后使用Javascript处理相应业务。然后可以随时更新和替换业务。范围

打开操作列表,如下图所示:

col6

2.4.1. 添加/修改操作

在操作列表页面里,点击"添加"或"修改"链接,将会进入编辑操作表单页面,如下图所示:

col7

名称:操作名称

访问路径: 访问URL地址

脚本:具体的JavaScript变量。具体去参考 操作脚本变量

2.4.2. 删除操作

在操作列表页面,选择想要删除的数据行的删除链接。然后将会弹出确认框,确认即可。

2.5. 本章总结

在此章中,我们先后讲解了菜单管理、页面管理、栏目管理、操作管理。通过对这章的了解,可以处理页面的操作。

接下来我们讲解数据库管理。

3. 数据库管理

数据库管理,将会通过动态SQL设计器,以及数据编辑器,来完成数据增删改查功能。在这章中将分为数据编辑器,以及数据查询两大内容来介绍如何使用。

首先我们打开数据表列表,如下图所示:

data1

其中"表说明"字段,来自于表注释,如果没有注释,则以表名来显示。

3.1. 数据编辑器

在数据表列表里,点击相应行的"设置"链接。进入"字段编辑器"页面,如下图所示:

data2

在金色站中,目前支持以下数据编辑器:

文本框,文本域,下拉框,日期选择器,上传文件工具,富文本编辑器。

以下将对一些重要编辑器,进行说明。

3.1.1. 下拉框

当编辑器选为下拉框时,将会让你填写下拉内容,如下所示:

data3

下拉内容格式如下:

<value>@@@<label>

以下是样例:

1@@@电商
2@@@外贸

另外下拉内容也可以从表字段注释中解析出来。当字段注解为以下格式时,方能解析出来:

<字段名>:<选项值1> <选项标签1>,<选项值2> <选项标签2>,<选项值3> <选项标签3>

注:以上冒号以及逗号,都是英文中的冒号以及逗号。

示例如下:

是否原创:0 原创, 1 转载

然后选择"解析字段注解",下拉内容就变成如下:

0@@@原创
1@@@转载

3.1.2. 上传文件工具

上传文件工具,在这里将会分为两类,一类是上传到本地目录时,系统将使用文件管理工具来上传,如下图所示:

data4

在这种情况下,这里设置的上传目录将没有意义。

一类是上传到非本地目录时,系统将直接使用上传对话框来上传文件,这时文件上传将上传到指定的"上传目录"中。

3.1.3. 富文本编辑器

富文本编辑器的设置,事实上,也主要与上传文件相关。如同上传文件工具一样,会分为两类:一类是上传到本地目录,一类是上传到非本地目录 如果是上传本地目录,则下面的"上传目录"字段将没有意义。如果是上传到非本地目录,系统将直接使用上传对话框上传文件,这时文件上传将上传到指定的"上传目录"中。

3.2. 查询数据

在数据表列表页面,点击相应表的"数据列表"链接,将打开相应表数据列表。如下图所示:

data5

在数据列表上方,是一个动态查询设计器,可以点击"高级设置",来编辑查询条件,如下图所示:

data6

点击"活加条件",则可以添加查询条件。如要删除条件,则可以去掉钩选条件前面的复选框。然后编辑好之后,可以选择 "保存",则下次打开时,这些条件会自己显示出来,不需重新选择。

3.3. 添加/修改数据

在表数据列表里,点击"添加"按扭或者"修改"链接,将进入数据编辑页面。不同的表,将有不同的字段。而字段编辑器则由前面设置的字段编辑器决定,如下图所示:

data7

3.4. 删除数据

在表数据列表里,点击相应行的"删除"链接。将会出现确认框,点击"好",将会彻底删除该数据条目。

3.5. 本章总结

本章先后介绍了数据表及管理内容。通过此章,你将能够对数据进行增删改查操作了。

4. i18n国际化管理

由金色站点所建设的平台,进行国际化将会特别容易,并且像页面一样可以随时修改,而不用重新部署和重启机器。

4.1. 国际化列表

打开菜单"设置">"国际化设置",将会打开国际化列表。如下图所示:

i1

在列表上方,可以通键名或者其值,来搜索国际化条目。

4.1.1. 添加国际化条目

点击"添加"按扭(快捷键:MAC:Control+Alt+A,Windows:),弹出添加对话框如下:

i2

输入键名后,然后点击"好"。系统将添加该键,然后对话框关闭,并又打开编辑对话框,如下图所示:

i3

修改国际化条目

在国际化条目列表里,编辑"修改"链接,将会打开编辑框,编辑完之后保存即可。

在修改之后,想要页面显示该属性最新值时,还必须要点击"同步更新"按扭进行同步才可以。

4.1.2. 删除国际化条目

在国际化条目列表里,点击相应行的"删除"链接。将会出现确认框,点击"好",将会彻底删除该数据条目。

4.2. 设置更多的国际化语言

打开"系统管理">"系统设置",找到名称为"sys.i18n"的那一行,如下图所示:

i4

点击"修改"链接,修改其值。这个值,由国家或者语言代码组成,然后以英文逗号相隔。代码详见 ISO_639-1 https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

4.3. 使用国际化消息

打开页面编辑器,然后使用以下标签或者函数来应用国际化消息。

//以函数的方式使用
${g.message(code:'test.name')}
//以标签的方式使用
<g:message code='test.name'/>

对于网站名称而言,默认在页面中引用的变量为"application.$siteName",但要使用国际化的消息时,则应该如下面这样使用:

//以函数的方式使用
 ${g.message(code:'goldsite.siteName',default:application.$siteName)}
//以标签的方式使用
<g:message code='goldsite.siteName' default="${application.$siteName}"/>

4.4. 本章总结

本章介绍了国际化消息以及如何在页面或栏目中使用。

5. 系统管理

系统管理里面,包括系统设置,以及个人管理,还有文件存储配制管理。

5.1. 系统设置

在系统设置里,你可以设置各个参数,来调整系统运行的行为。如下图所示:

sys
设置项说明
  1. site.name

    站点名称。

  2. site.theme

    站点当前皮肤

  3. sys.tplyes

    系统模板访问,yes模板可被web直接访问,no表示不可以,默认yes。

  4. sys.i18n

    用于支持的多国语言。支持语言以英文逗号分隔.编码详见 ISO_639-1 https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

  5. smtp.host

    邮件smtp主机

  6. smtp.port

    邮件smtp端口号,默认是587

  7. smtp.user

    邮件smtp用户名

  8. smtp.pass

    邮件smtp密码

  9. smtp.ssl

    决定smtp连接是否是SSL,默认是true

5.2. 个人管理

在个人管理子页面,将可以修改个人昵称,以及密码。如下图所示:

sys

5.2.1. 修改密码

点击“修改密码”,将会进入修改密码子页面。如下图所示:

sys

如果修改密码,你将要填入当前登录所使用的密码,以及你需要设置的新密码。点击“确定”后,如果提示失败,请检查原因再进行修改。

5.3. 本章总结

在本章,你了解到了系统管理这块可以针对一些系统和个人事项进行设置。还有文件存储配制这样的设置和管理。

6. 权限管理

权限管理,是系统管理员的操作,超级管理员(admin)帐号将对权限管理这个模块永远可见。以供超级管理员用户进行管理。 权限管理将主要是对于管理平台的帐户、菜单,以及特定操作进行权限控制。

6.1. 管理员管理

打开管理员管理子页面,在这里将可以添加、编辑、禁用管理员。如下图所示:

admin

6.1.1. 添加管理员

点击“添加管理员”,将打开添加管理员子页面。如下图所示:

admin

(1) 用户名, 帐号名,需要在系统中唯一。

(2) 真实姓名,可选。

(3) 密码,填写密码,最好8位及8位以上。

(4) 确认密码需与(3)密码项相同。

(5) 用户角色,是多项选择,可以选择多个角色。角色可以添加,请见 添加角色

6.1.2. 编辑管理员

点击“修改”链接,将会打开修改管理员子页面。如下图所示:

admin

6.1.3. 禁用管理员

点击“禁用”链接,将会改变管理员帐号帐态,变为禁用状态。当然可以将禁用状态改回为可用状态。

6.2. 角色管理

打开角色管理子页面,在这里将可以添加、编辑、删除角色和分配菜单/权限。如下图所示:

admin

6.2.1. 添加角色

点击“添加角色”,将打开添加角色子页面。如下图所示:

admin

(1) 角色名称,一般拼音和英文输入即可。角色名称输入之后,不可修改。 (2) 角色显示名称,一般用中文输入即可。

6.2.2. 编辑角色

点击“编辑角色”,将打开编辑角色子页面。如下图所示:

admin

6.2.3. 删除角色

点击“删除”链接,将会弹出确认对话框。如果点击“OK”,将会将该角色进行删除。如果删除失败,将提示失败信息。如下图所示:

admin

6.2.4. 分配菜单和权限

点击“分配菜单和权限”链接,将会打开分配菜单和权限子页面。

admin

选择该角色应该有的菜单和权限,然后点击“确认分配”按扭。将会给该角色赋予菜单和权限。

6.3. 本章总结

在这章,你可以给角色分配菜单和权限,然后再将角色指派给指定的管理员。

7. 参考

7.1. 文件上传存储配制

文件存储配制,是用于配制存储上传的图片视频等文件资源。在金色数据里,文件存储支持local(本地),或者ftp、sftp、webdav,你可以依据需要灵活选择。

这些配制主要放在application.yml里,如以下代码所示:

goldsite:
    servImg: true # 选项true,false 是否提供图片访问,如果提供,则imgServer必须配制成/image/get?url=
    imgServer: '/img/get?url='
    imgLoc: '.'  #图片存储位置
    uploadType: 'local'  # 选项:ftp,sftp,webdav,local 默认:local.
    ftp:
        host:                       #IP地址
        port: 21                    # 端口号
        user:                       #用户名
        pass:                      #密码
        localPassive: true # 是否被动模式
    sftp:
        host:                     #IP地址
        port:                     # 端口号
        user:                    #用户名
        pass:                    #密码
    webdav:
        serverUrl:                # URL地址
        user:                      #用户名
        pass:                   #密码

local:

这种方式,就是存储文件到本地。这种方式快捷和简单,只有最上面的基础配制项。

ftp:

这种方式,就是存储文件到FTP服务器。

sftp:

是SSH 文件传输协议,SSH 是一种加密和安全通信的协议。机器只要开通SSH服务器即可,一般linux系统 都提供支持。

webdav:

webdav 是一种基于HTTP(S)的文件传输协议。一般web服务器都提供支持和搭建,比如nginx,tomcat。

7.2. 金色站点页面标签

金色站点定义的标签都以"s开头",金色标签提供了大量的标签,让工作变得更为简单。

7.2.1. img

显示图片地址

属性:

src: 链接地址

例:

<img src="${s.img(src:'/abc/1.jpg')}">

7.2.2. col

定义栏目,标签体可以用作栏目默认内容。

属性:

name: 名称

例:

<col name="slider">
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</col>

7.2.3. oneRow

查询SQL,返回一行数据

属性:

var: 存放结果的变量定义

sql: String,SQL语句

param: List,参数列表

table:String,表名

field:String,字段

value:Object,字段值

where:String,查询条件

param:Map,参数(当sql参数为空时用这个)

sort:String,排序

7.2.4. rows

查询SQL,返回数据列表

属性:

var: 存放结果的变量定义

sql: String,SQL语句

param: List,参数列表

table:String,表名

field:String,字段

max:int,分页大小

offset: int,偏移位置

value:Object,字段值

where:String,查询条件

param:Map,参数(当sql参数为空时用这个)

sort:String,排序

7.2.5. opts

列出表字段的选项。这些选项,大部分都来自于表字段的注释,或者是后台配制的。

属性:

var: List,存放结果的变量定义

table:String,表名

field:String,字段

7.3. CSS3选择器入门

金色数据利用css非常强大和灵活的语法查找匹配HTML元素是非常棒的。金色数据里的CSS3节点选择器,实际上是使用JSoup组件的节点选择器解析器,因此与Jsoup对CSS3支持是一致的。

7.3.1. 基础选择器

  1. *

    任意元素。例如 *

  2. tag

    通过标签名称tag查找元素。例如 a

  3. ns|tag

    在命称空间里的标签查找元素。例如 fb|name 查找`<fb:name>`元素

  4. #id

    通过元素ID查找元素。例如:#logo

  5. .class

    通过class名称查找元素。例如: .masthead

  6. [attr]

    通过属性查找元素。例如 [href]

  7. [^attr]

    带有属性名称前缀的元素。例如: [^data-] 查找 带有`data-`属性前缀的元素

  8. [attr=value]

    带有属性值的元素。例如`[width=500](或者可以引起来,[]`)

  9. [attr^=value],[attr$=value],[attr*=value]

    带有属性前缀、后缀,含有指定值的元素。例如:[href*=/path/]

  10. [attr~=regex]

    带有属性值匹配那正则表达式的元素。例如:img[src~=(?i)\.(png|jpg?g)]

7.3.2. 联合选择器

  1. el#id

    查找el元素,其ID为id。例如 div#logo

  2. el.class

    查找el元素,其含有类class。例如 div.masthead

  3. el[attr]

    查找el元素,其带有属性attr。例如 a[href] , a[href].masthead

  4. ancestor child

    带有祖先元素ancestor 且有后代child的元素。例如 .body p 将会查找 p 元素,且其带有祖先元素 .body

  5. parent > child

    直接有指定的父元素parent的子元素child。例如 div.content > p

  6. siblingA + siblingB

    查找兄弟B元素,其有直接前置兄弟元素A。例如 div.head+div

  7. siblingA ~ siblingX

    查找兄弟X元素,其有前置兄弟元素A。例如 h1 ~ p

  8. e1,e1,e1

    组合多个选择器,查找 匹配以上任意被选择到的元素。例如 div.masthead, div.logo

7.3.3. 假类选择器

  1. :lt(n)

    查找元素,其元素在兄弟元素中索引于小于n。例如: td:lt(3),查找每行的前三个单元格。

  2. :gt(n)

    查找元素,其元素在兄弟元素中索引于大于n。例如: td:gt(1),查找单元格,这些单元格的索引要大于1

  3. :eq(n)

    查找元素,其索引等于n。例如: td:eq(0),查找 每行的第一个单元格

  4. :has(selector)

    查找元素,其至少含有匹配selector。例如: div:has(p) ,查找div元素,该元素含有p元素。

  5. :not(selector)

    查找元素,其不含有匹配selector。例如: div:not(:has(div)) 查找div元素,其不含有div子元素

  6. :contains(text)

    查找元素,其含有指定的文本。这个文本不分大小写。例如: p.contains(jsoup) 查找p元素,其含有文本’jsoup'

  7. matches(regex)

    查找元素,其文本匹配指定的正则表达式。 例如: td:matches(\\d+) 查找单元格,其含有数字。

  8. containsOwn(text)

    查找元素,其直接含有指定的文本。 例如: p:containsOwn(jsoup) 查找p元素,其自身含有文本’jsoup'

  9. :matchesOwn(regex)

    查找元素,其自身文本匹配指定的正则表达式。 td:matchesOwn(\\d+) 查找表格,其直接含有数字。

7.3.4. 结构化的假类选择器

  1. :root

    查找文档中的根元素,通常在HTML里,这通常是html元素。

  2. :nth-child(an+b)

    查找元素,其子元素索引是an+b的被选中。 例如: tr:nth-child(2n+1) 查找表格的每个奇数行。

  3. :first-child

    查找元素中的第一个子元素。 例如:div> p:first-child

  4. :last-child

    查找元素中的最后一个子元素。例如: ol > li:last-child

7.3.5. 更多内容

更多请参考 Jsoup文档

7.4. JavaScript入门

JavaScript 是世界上最流行的脚本语言。JavaScript 是一种轻量级的编程语言,很容易学习。

在这里我们做些简单介绍,更多内容可以看 这里

7.4.1. 声明(创建)JS变量

JS变量用`var`关键词声明,如下所示:

var c=1;
var b=2;
var xx=c/b;

这就与代数学一样类似,在上例中,我们使用c来保存值 1。在JavaScript中,这些等式左边的内容,被称之为变量。

变量就是存储数据的容器
JavaScript变量必须以字母或$或_开头
数据类型

在JavaScript中变量有很多种类型,但目前,我们只关注三种类型,数字 和 字符串,以及布尔类型。

字符串类型的文本,通常需要双引号或者单引号包围。而数字则不必。如下所示:

var c=1;
var b="Hello World!"

而布尔类型,只能有两个值 :true或 false。如下所示:

var c=true
var b=false

7.4.2. JS运算符

运算符 = 用于给 JavaScript 变量赋值。算术运算符 + 用于把值加起来。如下所示:

var c=3
var b=c+5

上述语解码器执行后,b的值 是8。

表格 1. JavaScript 算术运算符

运算符

描述

例子

结果

+

x=1+1

x=2

-

x=2-1

x=1

*

x=2*3

x=6

/

x=6/2

x=3

%

求余数(保留整数)

x=3%2

x=1

++

累加

x=1; ++x

x=2

 — 

递减

x=2;--x

x=1

+运算符还可以将字符串变量加起来,其实意是指连接起来。如下所示:

var c='Hello '
var b=c+'world'

上述语句执行后,b 的值 是 Hello world

7.4.3. JS条件语句

比较运算符

比较运算符在逻辑语句中使用,以测定变量或值是否相等。

给定x=9 下面的表格用以解释比较运算符:

运算符

描述

例子

==

等于

x==9为true

===

全等(值和类型)

x===9 为true

!=

不等于

x!=9 为false

>

大于

x>8 为true

<

小于

x<8 为false

>=

大于或者等于

x>=9 为true

小于或者等于

x⇐9 为true

逻辑运算符

逻辑运算符用于测定变量或值之间的逻辑。

给定 x=5 以及 y=2,下表解释了逻辑运算符:

运算符

描述

例子

&&

( x < 10 && y>2) 为false

||

(x==3 || y==3) 为false

!

!(x==y)为true

if语句

只有当指定条件为 true 时,该语句才会执行代码。如下所示:

if(weather=='sunny'){
  console.log('Good weather')
}

如果上述weather为’sunny’时,则会输出"Good weather"。

if…​else语句

请使用 if…​.else 语句在条件为 true 时执行代码,在条件为 false 时执行其他代码。如下所示:

if(weather=='sunny'){
  console.log('Good weather')
}else{
  console.log('Bad weather')
}

如果上述weather为’sunny’时,则会输出"Good weather"。否则,输出"Bad weather"。

If…​else if…​else 语句

使用 if…​.else if…​else 语句来选择多个代码块之一来执行。如下所示:

if(weather=='sunny'){
  console.log('Good weather')
}else if(weather=='cloudy'){
  console.log('Not bad weather')
}else{
  console.log('Bad weather')
}

如果上述weather为’sunny’时,则会输出"Good weather",如果为’cloudy',则会输出’Not bad weather',否则输出"Bad weather"。

7.4.4. JS循环控制

如果您希望一遍又一遍地运行相同的代码,那么我们需要JS提供的循环语句。JavaScript 支持不同类型的循环:for( 循环代码块一定的次数), while(当指定的条件为 true 时循环指定的代码块),

for循环

for 循环是您在希望创建循环时常会用到的工具。

下面是 for 循环的语法:

for (statement 1; statement 2; statement 3){
  被执行的代码块
}
statement 1

在循环(代码块)开始前执行,只执行一次。

statement 2

定义运行循环(代码块)的条件

statement 3

在循环(代码块)已被执行之后执行

示例如下:

for (var i=0; i<5; i++){
  console.log('runs at '+i)
}
while循环

while 循环会在指定条件为真时循环执行代码块。示例如下:

while (i<5){
  console.log('runs at '+i)
  i++;
}

如果 想跳出循环,则可以使用break关键词。示例如下:

while (i<5){
  console.log('runs at '+i)
  if( i<3){
    break;
  }
  i++;
}

7.4.5. JS注释

JavaScript 不会执行注释。我们可以添加注释来对 JavaScript 进行解释,或者提高代码的可读性。单行注释以 // 开头。多行注释以 /* 开始,以 */ 结尾。如下所示:

//这是单行注释
/*
 这是多行
 注释

*/
console.log("注释不会被JavaScript执行。")

7.4.6. JS函数

函数可被调用时执行的可重复使用的代码块。

函数语法
function func1(arg1,arg2){
 //code block...
}

当调用该函数时,会执行函数内的代码。

在调用函数时,您可以向其传递值,这些值被称为参数。这些参数可以在函数中使用。如下所示

func1(arg1,arg2)

函数示例如下:

function add(a,b){
 return a+b;
}

var ret=add(2,3)
console.log(ret);

上述代码运行输出ret的值 5

带有返回值的函数

有时,我们会希望函数将值返回调用它的地方。通过使用 return 语句就可以实现。在使用 return 语句时,函数会停止执行,并返回指定的值。如下所示:

function add(a,b){

 return 3;
}

上面的函数会返回值 3

7.4.7. JavaScript 对象

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数…​

此外,JavaScript 允许自定义对象。

JavaScript 对象

JavaScript 提供多个内建对象,比如 String、Date、Array 等等。对象只是带有属性和方法的特殊数据类型。

访问对象的属性

属性是与对象相关的值。使用语法是`objectName.propertyName`。示例如下:

var message="Hello World";
var x=message.length;

在这个例子使用了 String 对象的 length 属性来获得字符串的长度。上述代码执行后将会得到x的值为`11`

访问对象的方法

方法是能够在对象上执行的动作。你可以通过`objectName.methodName()`来调用方法。示例如下:

var message="Hello world!";
var x=message.toUpperCase();

这个例子使用了 String 对象的 toUpperCase() 方法来将文本转换为大写,代码执行后,x的值将是 HELLO WORLD!

创建 JavaScript 对象

通过 JavaScript,您能够定义并创建自己的对象。 创建新对象有两种不同的方法:1、定义并创建对象的实例;2、使用函数来定义对象,然后创建新的对象实例。

通过实例创建

person=new Object();
person.surname="Wang";
person.name="Blue";

这个例子创建了对象的一个新实例,并向其添加了2个属性,surname和name。

另一种形式创建对象,即文本方式:

person={surname:"Wang",name:"Blue"};

通过实例创建

function person(surname,name){
    this.surname=surname
    this.name=name
    //可以添加方法
   this.changeName=function(newName){
      this.name=newName
   }
}
var a1=new person('Wang','Blue')

7.4.8. JS内置对象

Number对象

JavaScript中,只有一种数字类型。Number对象的属性和方法请参考 这里

String对象

字符串对象用于处理已有的字符块。String对象的属性和方法请参考 这里

Date对象

Date 对象用于处理日期和时间。Date对象的属性和方法请参考 这里

Array对象

数组对象的作用是:使用单独的变量名来存储一系列的值。Array对象的属性和方法请参考 这里

Boolean对象

Boolean对象用于将非逻辑值转换为逻辑值(true 或者 false)。Boolean对象的属性和方法请参考 这里

Math对象

Math(算数)对象的作用是:执行常见的算数任务。。Math对象的属性和方法请参考 这里

7.5. 正则表达式入门

正则表达式,主要是用于处理搜索匹配字符串,极为强大重要的工具。

在JS里的正则表达有两种方法可以创建正则表达式对象。

7.5.1. 创建正则表达式对象

直接文本法
    /pattern/修饰符
创建RegExp对象法
    new RegExp(pattern, 修饰符);
参数

参数pattern是一个字符串,指定了正则表达式的模式或其他正则表达式。

修饰符

 

修饰符 描述

i

执行对大小写不敏感的匹配。

g

执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

m

执行多行匹配。

7.5.2. 有关正则表达式方法

RegExp对象方法

 

方法

描述

compile

编译正则表达式。

exec

检索字符串中指定的值。返回找到的值,并确定其位置。

test

检索字符串中指定的值。返回 true 或 false。

支持正则表达式的 String 对象的方法

 

方法 描述

search

search 检索与正则表达式相匹配的值。

match

找到一个或多个正则表达式的匹配。

replace

替换与正则表达式匹配的子串。

split

把字符串分割为字符串数组。

7.5.3. 有关正则表达式模式

方括号

方括号用于查找某个范围内的字符:

表达式

描述

[abc]

查找方括号之间的任何字符。

[^abc]

查找任何不在方括号之间的字符。

[0-9]

查找任何从 0 至 9 的数字。

[a-z]

查找任何从小写 a 到小写 z 的字符。

[A-Z]

查找任何从大写 A 到大写 Z 的字符。

[A-z]

查找任何从大写 A 到小写 z 的字符。

[adgk]

查找给定集合内的任何字符。

(red|blue|green)

查找任何指定的选项。

元字符

元字符(Metacharacter)是拥有特殊含义的字符:

元字符

描述

.

查找单个字符,除了换行和行结束符。

\w

查找单词字符。

\W

查找非单词字符。

\d

查找数字。

\D

查找非数字字符。

\s

查找空白字符。

\S

查找非空白字符。

\n

查找换行符。

\t

查找制表符。

\uxxxx

查找以十六进制数 xxxx 规定的 Unicode 字符。

量词

 

量词

描述

n+

匹配任何包含至少一个 n 的字符串。

n*

匹配任何包含零个或多个 n 的字符串。

n?

匹配任何包含零个或一个 n 的字符串。

n{X}

匹配包含 X 个 n 的序列的字符串。

n{X,Y}

匹配包含 X 或 Y 个 n 的序列的字符串。

n{X,}

匹配包含至少 X 个 n 的序列的字符串。

n$

匹配任何结尾为 n 的字符串。

^n

匹配任何开头为 n 的字符串。

7.5.4. RegExp 对象的使用说明

使用 test()

用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

例子:

var patt = /f/;
patt.test("The best things in life are free!");

上例中含有‘f’,所以上述结果输出为`true`.

使用 exec()

用于检索字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

例子:

/f/.exec("The best things in life are free!");

上例中含有‘f’,所以上述结果输出为`f`.

7.5.5. 字符串中有关正则方法,使用说明

search()

用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

例子:

var str = "Look and feel ";

var idx=str.search(/and/i)

输出结果为 5

replace()

用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

var str = "Look and feel ";

var newstr=str.replace(/and/i,"or");

输出结果为 Look or feel

7.5.6. 更多内容

更多内容请参考 正则表达式,来自MDN

7.6. 金色数据JS全局内置函数和变量

7.6.1. $(html,baseUri) :

返回JSoup库中的[Document]对象。使用此对象则可以对参数html进行CSS3选择器筛选。

参数说明:

html : html文本,一般为需要解析的HTML网页

baseUri: URL地址,一般是用来计算HTML网页里的相对链接,来转换成绝对链接。

7.6.2. $ajax(url,args):

发送http请求,并返回数据。

参数说明:

url : String,网页地址

args : Map,请求参数对象。具体内容如下:

参数 类型 说明

method

String

HTTP请求方法,默认`GET`

headers

Map

HTTP请求头,形式为key-value对象

encoding

Boolean

是否解码,默认true

proxy

String

代理地址, 代理支持三种类型:http,https,socks.

data

String

发送的数据,形式为a1=b&b1=3

该函数调用后,返回内容如下 :

参数 类型 说明

status

int

http响应状态码,200为正确响应o

headers

Map

http响应头

cookie

String

Cookie

content

byte[] or String

如果请求设定编码将返回String内容,否则byte[].

7.6.3. $ajax2(url)

返回 [GoldSpider] 对象,该函数主要是用于取代$ajax

参数说明:

url : String,网页地址

7.6.4. url(string)

返回 URL 对象,此函数主要是解析URL内容提供方便。

参数说明:

string : String,网页地址

7.6.5. md5(string)

返回字符串经md5编码的结果字符串。

参数说明:

string : String,内容

7.6.6. formatDate(date,pattern)

根据pattern格式化日期。

参数说明:

date : Date,日期

pattern : String,模式,比如yyyy-年,MM-月,dd-日,HH-时,mm-分,ss-秒。更多模式内容请参考 SimpleDateFormat

7.6.7. parseDate(date,pattern)

根据pattern解析字符串日期成 Date 对象。

date : String, 字符串日期

pattern : String,模式,比如yyyy-年,MM-月,dd-日,HH-时,mm-分,ss-秒。更多模式内容请参考 SimpleDateFormat

7.6.8. LOG(level,message)

输出日志,主要用于调试脚本

level : 可以是ERROR,WARN,INFO,DEBUG

message : 输出消息

返回 [Cookie] 操作对象.用于编解码cookie。

7.6.10. 内置类型

可以使用new关键字创建的对象

Map

其属性和方法可以参考 Map

JDate

其属性和方法可以参考 Date

7.7. 脚本变量

7.7.1. 页面脚本变量

页面操作脚本,用于处理来自于用户对该页面的请求。如果该脚本返回内容为false时, 脚本将不会继续执行。

查看 全局内置函数和变量, 以下是页面脚本特有变量:

变量
tableService

TableService,数据表服务。

request

HttpServletRequest , Http请求对象

params

Map,请求参数对象

response

HttpServletResponse , Http响应对象

model

Map,模型对象。

cmd

Pageable,分页对象

info

PageInfo,页面信息对象

messageSource

MessageSource,消息源对象

方法
名称 说明

void forward(String path)

转发到path处理。

void download(Map o)

下载内容。map参数含有两个内容,filename指定下载文件名, content下载数据

void render(String string)

渲染字符串。

void renderOk(Map map)

返回Ok,JSON字符串。

void renderError(String msg)

返回错误信息。

Map toPage(Map map)

返回分页对象 map参数内容: pageNum:当前页码,pageSize:页面大小,totalCount:总条数,$list:内容列表

返回Map内容: $list:内容列表,totalCount:总条数,totalPages:总页数,pageNum:当前页码, pageSize:页面大小。

7.7.2. 页面后续脚本变量

页面后续脚本,用于进一步处理页面查询结果。如果该脚本返回内容为false时, 脚本将不会继续执行。

查看 全局内置函数和变量, 以下是页面后续脚本特有变量:

变量
tableService

TableService,数据表服务。

request

HttpServletRequest , Http请求对象

params

Map,请求参数对象

response

HttpServletResponse , Http响应对象

model

Map,模型对象。

cmd

Pageable,分页对象

info

PageInfo,页面信息对象

messageSource

MessageSource,消息源对象

方法
名称 说明

void forward(String path)

转发到path处理。

void download(Map o)

下载内容。map参数含有两个内容,filename指定下载文件名, content下载数据

void render(String string)

渲染字符串。

void renderOk(Map map)

返回Ok,JSON字符串。

void renderError(String msg)

返回错误信息。

Map toPage(Map map)

返回分页对象 map参数内容: pageNum:当前页码,pageSize:页面大小,totalCount:总条数,$list:内容列表

返回Map内容: $list:内容列表,totalCount:总条数,totalPages:总页数,pageNum:当前页码, pageSize:页面大小。

7.7.3. 栏目后续脚本变量

栏目后续脚本,用于进一步处理栏目查询结果。如果该脚本返回内容为false时, 脚本将不会继续执行。

查看 全局内置函数和变量, 以下是栏目后续脚本特有变量:

变量
tableService

TableService,数据表服务。

request

HttpServletRequest,Http请求对象

params

Map,请求参数对象

model

Map,模型对象。

cmd

Pageable,分页对象

info

ColumnInfo,页面信息对象

messageSource

MessageSource,消息源对象

方法
名称 说明

void forward(String path)

转发到path处理。

void download(Map o)

下载内容。map参数含有两个内容,filename指定下载文件名, content下载数据

void render(String string)

渲染字符串。

void renderOk(Map map)

返回Ok,JSON字符串。

void renderError(String msg)

返回错误信息。

Map toPage(Map map)

返回分页对象 map参数内容: pageNum:当前页码,pageSize:页面大小,totalCount:总条数,$list:内容列表

返回Map内容: $list:内容列表,totalCount:总条数,totalPages:总页数,pageNum:当前页码, pageSize:页面大小。

7.7.4. 操作脚本变量

操作脚本,用于处理来自于用户对该URL的请求。如果该脚本返回内容为false时, 脚本将不会继续执行。

查看 全局内置函数和变量, 以下是操作脚本特有变量:

变量
tableService

TableService,数据表服务。

request

HttpServletRequest , Http请求对象

params

Map,请求参数对象

response

HttpServletResponse , Http响应对象

model

Map,模型对象。

cmd

Pageable,分页对象

messageSource

MessageSource,消息源对象

方法
名称 说明

void forward(String path)

转发到path处理。

void download(Map o)

下载内容。map参数含有两个内容,filename指定下载文件名, content下载数据

void render(String string)

渲染字符串。

void renderOk(Map map)

返回Ok,JSON字符串。

void renderError(String msg)

返回错误信息。

Map toPage(Map map)

返回分页对象 map参数内容: pageNum:当前页码,pageSize:页面大小,totalCount:总条数,$list:内容列表

返回Map内容: $list:内容列表,totalCount:总条数,totalPages:总页数,pageNum:当前页码, pageSize:页面大小。

7.8. 页面显示标题EL表达式

如果使用EL表达式,系统将会把显示标题当作GROOVY模板处理。里面变量会含有脚本表达式结果, 以及$siteName 变量等。具体如下:

7.8.1. 变量

$siteName: 字符串,站点名称。

$request: HttpServletRequest类型,(请参考 https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html),请求对象。

<来自脚本变量运算结果>:如果脚本变量向model里添加了key-value对,则将会在这里key变成了变量。

7.9. 金色数据对象

7.9.1. Pageable

这个类的具体实现类,有两个,一个是BaseCommand,另一个是PageParam.

属性
字段 类型 说明

pageNum

int

当前页码

numPerPage

int

每页记录数

方法
名称 说明

int pageFirst()

偏移位移

int pageSize()

每页记录数

7.9.2. PageBean

属性
方法
名称 说明

List getRecordList()

元素列表。

int getNumPerPage()

返回页大小

int getCurrentPage()

返回当前页

int getTotalCount()

返回总记录数

int getPageCount()

返回总页数

7.9.3. TableService

属性
方法
名称 说明

PageBean listTables(BaseCommand cmd,String keyword);

分页查询数据库表。PageBean 请参考 PageBean .

List<Map> listTableFields(String table)

返回指定表的字段列表。Table Field Map里包含的内容请见下面.

Map getIdField(String table)

获取ID字段。Table Field Map里包含的内容请见下面.

def rows(String table,String where,Map param,Pageable cmd,String sortFields)

查询数据库表,返回Map,该Map包含两个类容,rows(行数据),columns(列数据)。

参数说明: table:表名,where:SQL查证条件,param:实际参数,cmd:分页对象,请参考 Pageable,sortFields:排序字段

Map oneRow(String table,String where,Map param,String sortFields)

查询数据库表,返回Map,该Map包含两个类容,row(单行数据),columns(列数据)。

参数说明: table:表名,where:SQL查证条件,param:实际参数,sortFields:排序字段

Map getRow(String table, String field, Object val)

根据字段名称以及值返回第一行数据。

参数说明: table:表名,field:字段名, val:字段值

List rows(String table, String field, Object val)

根据字段名称以及值返回数据。 参数说明: table:表名,field:字段名, val:字段值

rows(String table, String field, Object val, Pageable pageable)

根据字段名称以及值分页返回数据。

参数说明: table:表名,field:字段名, val:字段值

List rows(String sql, List<Object> params)

分页查询SQL。 参数说明: sql:SQL语句,params:参数列表

count(String sql, List<Object> params)

统计查询SQL结果。 参数说明: sql:SQL语句,params:参数列表

PageBean rows(String sql, List<Object> params, Pageable pageable)

分页查询SQL。 参数说明: sql:SQL语句,params:参数列表,pageable:请参考 Pageable

Map getRow(String table, Object keyFieldVal)

根据主键查询指定表数据 参数说明: table:表名,keyFieldVal:主键值

Object insertOrUpdate(String tableName, Map fields)

插入或更新指定表数据。如果fields不含主键值,则为插入,否则为更新。 参数说明: tableName:表名,fields:键值对

Object insertRow(String tableName, Map fields)

插入指定表数据,返回主健值。

参数说明: tableName:表名,fields:键值对

int updateRow(String tableName, String field, def fieldValue, Map fields)

根据条件更新指定表数据。

参数说明: tableName:表名,field:条件字段, fieldValue:指定字段值, fields

int updateRowById(String tableName, Object value, Map fields)

根据主键条件更新指定表数据。 参数说明: tableName:表名, value:指定键值, fields:要更新的内容。

int deleteRowByField(String tableName, String field, def value)

按字段值删除行。 参数说明: tableName:表名,field:条件字段, fieldValue:指定字段值 。

int deleteRowByIds(String tableName, List ids)

同时删除多个主键值。 参数说明: tableName:表名,ids:键值列表 。

int deleteRowById(String tableName, def keyValue)

根据ID删除行数据 参数说明: tableName:表名,keyValue:键值 。

List listOpts(String table, String field)

列出指定表中指定字段的选项。注:需要事先在后台配制。 参数说明: tableName:表名,field:字段名称 。

TableField Map里的内容

字段 说明

label

字段标签,来自于字段注释。如果字段注释里含有英文分号":",则截取分号的内容为标签。

remarks

来自于字段注释。

field

字段名称

pkey

如果为1,则为主键,否则不是。

colType

字段的JAVA类型。