小编Bur*_*ith的帖子

Grails重定向打破params类型

我的Grails代码有一个搜索功能,在执行findAllBy查询后重定向到另一个控制器操作:

def results = Foo.findAllByBar(baz)
redirect(action: "result", params: [results: results])
Run Code Online (Sandbox Code Playgroud)

findAllByBar按预期返回带有模型的ArrayList,但在重定向之后,接收操作获得一个String数组.更糟糕的是,当只有一个结果时它甚至没有得到一个数组,它只是得到一个字符串.

鉴于我必须在接收视图中迭代结果,在字符串上执行它将仔细地单独打印每个字母.我们都同意这可能不是理想的行为.

grails grails-controller

3
推荐指数
1
解决办法
4335
查看次数

如何在 Grails GORM 中强制刷新

我有一项将任务分配给操作员的服务。在方法内部,我在循环内及时分配许多任务。我想刷新任务、操作员和 DistributionLog。如果我只需要保存一个域名,我想我可以做类似的事情

Operator.withTransaction{ //...some code }
Run Code Online (Sandbox Code Playgroud)

但我至少有 3 个域需要保存,更糟糕的是,其中两个域相互依赖。操作员有一个任务列表。

我迫不及待地等待所有分配完成,然后操作员才能获得他的任务,所以我必须强制它刷新。更难的是,这一切都在 multitenantService.doWithTenant() (多租户插件)中

grails transactions flush

3
推荐指数
1
解决办法
7710
查看次数

Grails背景过程

我是Grails的新手,我要求我不知道如何实现.我需要创建一个与Grails应用程序一起运行的进程,并进行远程调用,处理接收到的数据并将其写入DB,以便Grails应用程序可以使用它.

到目前为止,我认为我需要利用域控制器,但我不知道如何创建一个在后台持续运行并更新数据库的单独进程.

可能吗?我可以获得参考或代码示例吗?谢谢.

grails scheduled-tasks

2
推荐指数
1
解决办法
2434
查看次数

Grails允许null为double而不工作

可以为nullable不适用于lat和lng.请帮忙.

class Location {
    int id
    String country
    String province
    String city
    double lat 
    double lng 
static mapping = {
    table: 'Locaations'
    country length:100
    province length: 100
    city length: 100
}    
static constraints = {
    province(blank:true, nullable:true)
    city(blank:true, nullable:true)
    lat(blank: true, nullable:true)
    lng (blank:true, nullable:true)

}
Run Code Online (Sandbox Code Playgroud)

}

grails grails-orm

2
推荐指数
1
解决办法
1286
查看次数

无法解析类org.apache.commons.lang3.StringUtils grails

我正在使用Eclipse开发grails版本2.2.1的应用程序,问题是,当我运行应用程序时,我收到下一条消息:

 unable to resolve class org.apache.commons.lang3.StringUtils
Run Code Online (Sandbox Code Playgroud)

我将common-lang-jar添加到我的项目中并作为依赖项,但我得到了相同的问题.我能做什么?

grails dependency-management

2
推荐指数
1
解决办法
7841
查看次数

如何在Grails中更改控制器名称URL?

我正在尝试更改Grails中控制器名称的默认约定.我的控制器类已命名LongNameInCamelCaseController.Grails约定优于配置设置此控制器的URL映射longNameInCamelCase.我希望这个控制器名称在url友好'long-name-in-camel-case'.

有人已经这样做了吗?

谢谢.

grails controller

2
推荐指数
1
解决办法
1015
查看次数

如何优化Grails中的选择属性?

我有一个生产使用的应用程序,当用户进入提案索引页面时,它需要很长时间,有时会超时.我已经将问题缩小为选择所有Proposal对象的SQL语句.问题是Proposal对象有许多图像(byte [])存储在内存中,而这些图像没有在索引页面中使用.这些图像很大,从而导致了问题.

我可以在Grails中优化此查询以删除该页面上不需要的属性或仅添加我在GSP中的属性的不同方法有哪些?

这是控制器代码(scaffolded):

    def index(Integer max) {
        params.max = Math.min(max ?: 10, 100)
        respond Proposal.list(params), model:[proposalInstanceCount: Proposal.count()]
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!

grails query-optimization grails-orm

2
推荐指数
1
解决办法
247
查看次数

由于grails 2.4.4中的IllegalStateException,无法运行集成测试

我使用Grails 2.4.4作为我的应用程序.我为我的控制器写了一个集成测试.

class UserControllerIntegrationSpec extends IntegrationSpec {
    UserController controller = new UserController()

    void "test something"() {
        when:
        controller.request.method = 'POST'
        controller.create()

        then:
        controller.response.status == HttpStatus.OK.value()
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用IntelliJ运行测试时,我得到一个例外:

java.lang.IllegalStateException: Could not find ApplicationContext, configure Grails correctly first
    at grails.util.Holders.getApplicationContext(Holders.java:97)
    at grails.test.spock.IntegrationSpec.$spock_initializeSharedFields(IntegrationSpec.groovy:41)
Run Code Online (Sandbox Code Playgroud)

当我使用带test-app命令的控制台运行集成测试时没有问题.PS单元测试工作没有问题.

grails integration-testing intellij-idea spock

2
推荐指数
1
解决办法
2253
查看次数

java.lang.ExceptionInInitializerError groovy编译器加载错误

当我执行 JUnit 测试用例时,出现以下错误。我正在使用 Grails 域测试用例的 Expectations 插件。

BuildConfig.groovy 文件代码:

plugins {
   compile ":domain-expectations:0.6.1"
}
Run Code Online (Sandbox Code Playgroud)

我收到的错误:

java.lang.ExceptionInInitializerError
    at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:61)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:72)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:159)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at com.lonecyprus.grails.test.Specification.<clinit>(Specification.groovy)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at junit.framework.TestSuite.createTest(TestSuite.java:63)
    at junit.framework.TestSuite.addTestMethod(TestSuite.java:310)
    at junit.framework.TestSuite.addTestsFromTestCase(TestSuite.java:153)
    at junit.framework.TestSuite.<init>(TestSuite.java:132)
    at org.junit.internal.runners.JUnit38ClassRunner.<init>(JUnit38ClassRunner.java:72)
    at org.junit.internal.builders.JUnit3Builder.runnerForClass(JUnit3Builder.java:11)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

Caused by: groovy.lang.GroovyRuntimeException: Conflicting module …
Run Code Online (Sandbox Code Playgroud)

grails unit-testing

2
推荐指数
1
解决办法
5526
查看次数

groovy创建新的xml节点

我想创建一个简单的xml节点,然后查看来自http://docs.groovy-lang.org/latest/html/api/groovy/util/Node.html的文档并编写这些代码.

    def newbook = new Node(null, 'book', [id:'3'])
    newbook.appendNode(new Node(newbook,'title',[id:'BookId3']))
    newbook.appendNode(new Node(newbook,'author',[id:'3'],'Harper Lee'))

    println groovy.xml.XmlUtil.serialize(newbook)
Run Code Online (Sandbox Code Playgroud)

但输出是

<?xml version="1.0" encoding="UTF-8"?><book id="3">
  <title id="BookId3"/>
  <title/>
  <author id="3">Harper Lee</author>
  <author/>
</book>
Run Code Online (Sandbox Code Playgroud)

在我看来,有两个标题标签和作者标签被创建.为什么?

我也试过了

    def newbook = new Node(null, 'book', [id:'3'])
    newbook.appendNode(new QName('title'),'BookId3')
    newbook.appendNode(new QName('author'),[id:'3'],'Harper Lee')
    println groovy.xml.XmlUtil.serialize(newbook)
Run Code Online (Sandbox Code Playgroud)

输出是

<?xml version="1.0" encoding="UTF-8"?><book id="3">
  <title xmlns="">BookId3</title>
  <author xmlns="" id="3">Harper Lee</author>
</book>
Run Code Online (Sandbox Code Playgroud)

现在它看起来不错,但有没有办法删除命名空间?

理想情况下,我希望有这样的东西

<book id="3">
  <title>BookId3</title>
  <author id="3">Harper Lee</author>
</book>
Run Code Online (Sandbox Code Playgroud)

然后在replaceNode()方法中使用它

xml groovy

2
推荐指数
1
解决办法
2771
查看次数