使用 Groovy 构建您的内网

面向 Grails 的类型安全 DSL:无需 HTML,无需 JavaScript

HTML PDF CSV Mail

声明式描述,告别模板

new UiFormSpecifier().ui user, {
    section "User", {
        field user.username_
        field user.firstName_
        field user.lastName_
        ajaxField user.manager_,
            this.&selectUser
    }
    formAction this.&saveUser
}
slideshow crew form

编译期类型检查

  • 从您的类自动生成 field_ 字段符号

  • 重命名字段时,编译器会定位所有使用该字段的界面

  • 零额外代码实现校验错误本地化

slideshow crew form validation

表格、过滤器与分页

slideshow crew users

几行代码生成图表

diag dsl bar diag dsl line diag dsl pie diag dsl whiskers

同一套 DSL,直接输出 PDF

new UiPrintableSpecifier().ui {
    printableHeader '2.5cm', {
        show userHeader, Width.THIRD
    }
    printableBody {
        show userShow, Width.MAX
        table userTable, Width.MAX
        diagram barChart, Width.MAX
    }
}
slideshow pdf sample

功能开箱即用


全文检索


文件预览


模型上的 JDBC


SSH 与 SFTP

在线实时体验

文档中的每个 DSL 页面都能在模态窗口中打开并运行示例

Docs › DSLs ▶ 在线体验

使用 DSL 构建您自己的内网(无需 HTML 或 JavaScript)

Taack-UI 是一个 Grails 插件,它通过静态类型的 Groovy DSL(领域特定语言)来描述用户界面,从而对 Grails 进行扩展。

安装

配置 Java、Grails 以及您的第一个 Taack 服务器。

第一个应用

循序渐进:表格、表单、过滤器和菜单。

体验 DSL

每个 DSL 页面都可以在模态窗口中实时打开并运行示例。

最新版本:0.7.11(含 0.7.10):新增可从设置菜单中选择的多款主题,并重构了保存机制以避免数据绑定。 全部新闻 →

从代码到界面

只需几行 Groovy 代码即可定义一个表单。字段是由您的类生成的符号(如 username_),因此编译器会对其进行检查;约束条件会自动转化为本地化的错误消息。

def form() {
    DslSampleUser u = new DslSampleUser()
    taackUiService.show(new UiBlockSpecifier().ui {
        modal {
            form createForm(u, {
                row {
                    col {
                        section 'User', {
                            field u.username_
                            field u.firstName_
                            field u.lastName_
                        }
                    }
                    col {
                        section 'Details', {
                            field u.age_
                            field u.birthday_
                            field u.city_
                            field u.status_
                            field u.enabled_
                        }
                    }
                }
                formAction this.&saveForm as MC
            })
        }
    })
}
Form with validation errors

功能特性

字段级安全控制

根据用户在*每个字段*上的权限来显示和编辑对象。用户无权执行的链接和表单操作会自动隐藏。

一种 DSL,多种输出

同一份界面描述可同时渲染为 HTML、PDF、邮件*和 *CSV。

本地化与数据校验

标签来自 i18n 国际化文件,校验错误无需编写额外代码即可实现本地化显示。

过滤、排序与分页

无需编写查询语句或维护会话数据,即可实现表格与过滤器。

全文检索

对静态类型的领域对象进行 Solr 索引,支持分面搜索与结果排序,并可扩展文件预览功能。

模型上的 JDBC

在 IntelliJ、DBeaver 或 LibreOffice Base 中使用 TQL(Taack 查询语言)查询领域对象。

SSH 与 SFTP

在服务器进程内运行的 Shell 界面,以及按用户隔离并带有凭据校验的虚拟文件系统(taack-ui-ssh 模块)。

Git 服务器

Intercom 应用通过 SSH 提供 Git 服务:使用 AsciiDoc 编写的文档在推送后即可直接渲染。

为什么选择 Taack?

Taack Grails 与 GSP JavaScript 前端

UI 编写方式

静态类型的 Groovy DSL

GSP 模板、HTML、CSS

JavaScript 或 TypeScript,外加 REST API

字段名称检查

编译期

运行期

取决于 API 契约

字段与操作级权限

内置支持,自动隐藏无权限链接

手动编写

前后端均需手动编写

PDF、CSV、邮件

与界面使用相同的 DSL

需编写独立代码

需编写独立代码

需掌握的语言

Groovy

Groovy、HTML、CSS、JavaScript

Groovy 或 Java、JavaScript、HTML、CSS

基于 Taack 构建的应用

Crew

Crew:用户、角色与组织层级管理。

FreeCAD PLM

FreeCAD PLM:FreeCAD 模型共享与线性版本控制。

Intercom

Intercom:SSH 与 Git 服务器,支持通过 Git 推送 AsciiDoc 文档。

Viewers

Viewers:转换并预览文件(例如 STEP 模型)。

Collabora Editor

Collabora Editor:使用 Collabora 在线编辑办公文档附件。

SSH 与 SFTP

screenshot ssh
Figure 1. SSH 服务器会话
screenshot sftp
Figure 2. SFTP 文件浏览器