Grails Web服务前端没有真正的域名

时间:2013-08-07 18:22:48

标签: grails gorm webservice-client grails-2.0

我有一个现有的应用程序,它是一个前端应用程序,它从外部Web服务中检索所有信息。我想使用Grails框架重新创建此应用程序,但用例有点奇怪。 Grails是模型驱动的。在这种情况下,我真的没有数据库表。我的数据是通过Web服务调用实时接收的。我对社区的问题是你将如何实现以下用例:

  1. 员工搜索:

    • 所有员工数据都来自网络服务电话。我需要允许用户输入例如" EmployeeID"并选择一个"客户"。
    • 然后,Grails应用程序对相应的Web服务进行Web服务查询并撤回结果。
    • 这里是未知部分:获取这些结果并将其融入Grails模型的最佳方法是什么?换句话说,我需要显示结果的数据网格(搜索结果)。网格应该像Grails列表操作一样工作,允许用户对特定列,分页等进行排序。

      • 我不得不认为这个用例很常见吗?这样一个项目的最佳方式是什么?我应该使用像Dojo或JQuery这样的外部javaScript库来提供网格功能吗?
      • 表现也是一种方法的关注

1 个答案:

答案 0 :(得分:3)

创建Grails应用程序没有一种方法。应用程序通常会使用可以轻松访问关系数据库表中数据的域类,但您可以轻松切换到NoSQL数据存储区,甚至不像应用程序那样使用直接持久性。

您的问题的简单答案是,您应该在src/groovysrc/java中创建非持久性数据类,以表示您正在使用Web服务调用的数据。您仍然可以将Grails用于其控制器和GSP,标记库,服务(当然,非事务性,因为不会有数据库访问),并且还可以利用许多可用的插件。

使用标准生成的控制器和GSP来显示带有排序和分页的数据,您不必做太多工作。生成脚本确实需要域类,但是你可以作弊来获取那些生成的(当然你总是可以手工编写代码)。例如,如果您在src / groovy / com / yourcompany中有Person类,请将其移至grails-app/domain

package com.yourcompany

class Person {
   String firstName
   String lastName
}

然后运行grails generate-all com.yourcompany.Person,它将创建控制器及其单元测试和GSP。现在将其移回src/groovy并根据需要使用它。 GSP不期望域类,它们只是期望单个类实例或实例列表。

您需要将控制器调用转换为person.save()之类的内容才能使用您的Web服务,但大部分代码都应该是可重用的。

您可以利用的一件事是验证。您可以使用@Validateable注释类并定义约束以利用非持久类的Grails验证 - 有关详细信息,请参阅the documentation