【问题标题】:How to guarantee a class is never exposed client side with Vaadin如何保证类永远不会暴露在 Vaadin 的客户端
【发布时间】:2015-10-07 11:18:58
【问题描述】:

我了解 Vaadin 使用一些逻辑只公开 UI 代码,然后调用服务器通过 Javascript 访问代码。但是,假设我有一个Listener,例如一些引用其他类的代码。所以假设我有类似的东西:

PojoClass data = DatabaseClass.getDataFromDatabase();
doSomeProcessingOnData(data);
..
myTextField.setValue(data.getSomeValue());
..

现在我如何确定DatabaseClass 后面的代码没有暴露为Javascript。我认为这只是发生了,但更具体地说,如何说doSomeProcessingOnData(data) 方法可能会调用 4-5 个具有某些内部 IP 属性的不同类而不被公开?我知道PojoClass 会被暴露,但我不希望doSomeProcessingOnData(data) 的内部被暴露。

【问题讨论】:

    标签: javascript java jakarta-ee vaadin vaadin7


    【解决方案1】:

    业务逻辑保留在服务器端

    您的 Vaadin 应用程序的业务逻辑在纯 Java 中保留在服务器端。所以没有暴露的风险。

    Vaadin 将用户界面远程连接到客户端。

    例如,当单击按钮时,客户端 JavaScript 库会向服务器发送一个信号,以在服务器上运行 ClickListener 代码。如果该服务器端 Java 代码导致用户界面小部件的状态发生变化,则 Vaadin 会将这些小部件状态更改中继到客户端的 JavaScript 库,以便向用户进行可视化更新。 客户端仍然幸福地没有意识到您的服务器端 Java 代码连接到数据库,在 Web 服务上调用,打开了到数据馈送的套接字连接,进行了一些会计计算,从而产生了一个新的“总计”值,将消息发布到队列,发送电子邮件,并将条目写入审计跟踪。客户端所知道的是:“单击按钮”-->“总文本字段有新值要显示”。

    Vaadin 视为XWindows 的网络版本。

    【讨论】:

    • 因此,如果我正确阅读,TextField 基本上是从服务器推送到客户端的,因为客户端不知道服务器端的 Listener 类中的 TextField 发生了变化.对吗?
    • 一旦显示,TextField 已经存在于客户端,并一直存在,直到被您的代码删除。当您设置 TextField 的 content 属性的新值时,Vaadin 会自动记录。当您的 ClickListener Java 代码完成执行时,Vaadin 会自动更新客户端小部件的所有记录状态更改,包括该 TextField。一个新的TextField不会发送到客户端,只是一个更新现有TextField 的内容属性值的指令。这使得 Vaadin 对用户来说视觉上很稳定,而且速度惊人。
    • 我很难理解 TextField 组件是如何知道自我更新的。这完全有道理,这实际上就是我所缺少的。非常感谢,真的很有帮助!
    猜你喜欢
    • 2019-03-23
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    相关资源
    最近更新 更多