22

JavaScript中有规则引擎吗?

问题是在这种情况下:

  • 考虑一个具有用户填写表单的 Web 应用程序。
  • 当用户填写每个字段并继续下一个字段时,用 JavaScript 编写的业务逻辑控制页面下方表单元素的可见性(和其他属性)。
  • 提交表单后,服务器端也应用了相同的业务逻辑,尽管在 Java 中是为了防止浏览器端的任何事故/操作。

  • 现在,如果我们有一个类似 JSR 94/Drools/JRules 的规则引擎,可以在 Java 和 JavaScript 中执行规则,那不是很好吗?使用这样的规则引擎,我可以避免对规则进行硬编码,并且还保留了客户端和服务器端验证的灵活性

(PS:我尝试过 AJAX 路线,发现应用程序的响应速度变慢了很多,因此很难向习惯于手工编码的纯 JavaScript 版本的用户销售。)

4

3 回答 3

7

JSR-94 是 Java 规范,所以我看不出它与浏览器有什么关系。

有谷歌 JSON 规则:

http://code.google.com/p/jsonrules/

您说您尝试了 AJAX 路由。这是否意味着在服务器上运行的规则引擎和访问它的异步调用?

于 2011-10-05T12:35:23.253 回答
4

这是一个有效的问题。从这篇文章,JSR 94

没有标准化以下内容: 规则引擎本身 规则的执行流程 用于描述规则的语言 Java EE 技术的部署机制

因此,可以使用可以在客户端和服务器上执行的 DSL,并且可以按照 JSR 94 架构进行开发、执行和管理。或不。

另一篇文章使用 Java 脚本 API 创建一个简单的规则引擎使用JSR-233 和其他东西来创建一个规则引擎系统。然而,这早于 JSR 94。

因为我也在寻找解决方案,所以我进入了这个 stackoverflow 页面。目前,我有一个页面要在客户端进行验证,其中字段组可以触发不同的验证规则,并且要求正在发生变化。用命令式代码编写它只会造成高圈复杂度的混乱。

然而,最简单的做法是使用众多 JavaScript 表单验证库之一。还在找。

于 2014-07-02T04:40:27.857 回答
1

由于 javascript 存在于浏览器中,因此用户很容易检查您的源代码并绕过任何 js 验证机制。这就是为什么它通常在服务器端完成。

这很痛苦,但我通常在 javascript 和服务器上都实现验证,这样“普通”用户将获得快速响应,而“黑客”将被排除在系统之外。不幸的是,如果您想要良好的用户体验和良好的安全性,我认为这是您需要采取的方式。

要回答您的问题,据我所知,没有可在客户端和服务器端使用的通用库。

PS。记住 JavaScript 不是 Java!:-) http://en.wikipedia.org/wiki/JavaScript#JavaScript_and_Java

于 2011-10-05T13:00:49.297 回答