小编dma*_*tro的帖子

Grails/Groovy log4j - 记录行号,方法名和类名

似乎在Grails中或者更好地说Groovy,不可能将日志记录模式设置为记录行号,方法和类名.或者你可以,但你会收到Log4j类的行号和方法名称,如:

%F:%L -? SLF4JLog.java:213
Run Code Online (Sandbox Code Playgroud)

我发现了一个与Grails无关的问题:http: //jira.grails.org/browse/GRAILS-9789

那么如何在Grails中记录这些信息呢?

grails groovy log4j

5
推荐指数
1
解决办法
1119
查看次数

如何在grails 2.2.4中模拟控制器中的私有方法

我有一个私有方法,使用元类在grails 1.3.7中进行了模拟,但现在我将grails版本升级到2.2.4,同样的模拟失败了.

测试方法有私有方法调用

   private def MyPrivateMeth1(def arg1, def arg2) {
...
}
Run Code Online (Sandbox Code Playgroud)

模拟是这样的

MyController.metaClass.private.MyPrivateMeth1 = { a, b ->
... 
}
Run Code Online (Sandbox Code Playgroud)

grails groovy unit-testing mocking

5
推荐指数
2
解决办法
5408
查看次数

Grails 2.x createCriteria'或'不适用于嵌套关联

似乎在Grails 2.x中,如果你有一个域类关联,并且你尝试or在该关系+另一个查询上运行createCriteria ,or它将忽略另一个查询并只使用嵌套关联的结果.我意识到这可能有点令人困惑,所以这里有一个例子:

class Passenger {
    Long id
    Boolean isDriving
}

class Car {
    Long id
    Passenger passenger
    Boolean isMoving

    static constraints = {
        passenger nullable: true
    }
}
Run Code Online (Sandbox Code Playgroud)

和测试:

class CarIntegrationTests {
    @Test
    void testCar() {
    Passenger passenger1 = new Passenger(isDriving: true)
    passenger1.save()

    Car car1 = new Car(passenger: passenger1, isMoving: false)
    Car car2 = new Car(isMoving: true)

    car1.save()
    car2.save()

        def queryResults = Car.createCriteria().list() {
            or {
                eq('isMoving', true)// This by itself works

                passenger {// And …
Run Code Online (Sandbox Code Playgroud)

grails grails-orm createcriteria grails-2.0

5
推荐指数
1
解决办法
4596
查看次数

Groovy 2.0中的小端到大端?

什么是将小端数转换为大端数的最佳方法?

def i = 0x12345678;
def j = 0x78563412;
assert i == convert(j) // ?
Run Code Online (Sandbox Code Playgroud)

我知道我可以掩盖字节并重新排序它们但是什么是更加时髦的方式?

groovy bit-manipulation

4
推荐指数
1
解决办法
243
查看次数

保存在afterInsert事件中时,对象不会持久存在

我有这样的域类:

 class Domain {
   String a
   int b
   String c
  ...


def afterInsert(){
       def anotherDomain = new AnotherDomain()
         anotherDomain.x=1
         anotherDomain.y=2

        if(anotherDomain.save()){
            println("OK")
         }else{
              println("ERROR")
          }

     }
  }
Run Code Online (Sandbox Code Playgroud)

它打印"OK",我甚至可以打印anotherDomain对象,一切似乎没问题,没有错误,没有,但是anotherDomain对象不会在数据库中持久存在

grails grails-orm

4
推荐指数
1
解决办法
1365
查看次数

在Tomcat中选择Grails Environment

我继承了一个部署在Tomcat中的Grails项目.我基本上必须对先前工程师所做的工程进行逆向工程.

我的问题是Grails如何选择其中一个Grails环境:

所以在Config.groovy中有:

environments
{
    development 
    {
        .  . . 
    }
    production
    {
       . . .
    }    

}
Run Code Online (Sandbox Code Playgroud)

但是,在部署的Tomcat服务器中,如何在启动Tomcat时选择"开发"而不是"生产"?我假设它会像web.xml中的某些context或init参数一样

<code>
    <init-param>
        <param-name>grails.environment</param-name>
        <param-value>production</param-value>
    </init-param>
</code>
Run Code Online (Sandbox Code Playgroud)

所有grails文档都假定您运行

grails war your-selected-environment
Run Code Online (Sandbox Code Playgroud)

但没有设计准确记录战争文物如何受到影响.

grails tomcat config

4
推荐指数
2
解决办法
5570
查看次数

如何在grails中使用过滤器

我有一个过滤器,我想过滤除了带来登录页面的ONE之外的所有操作.
如果我过滤掉所有具有某些条件的页面,那么甚至LOGIN页面也会被过滤掉,因此当条件未满足时它会卡在infinte循环中(用户未登录). session.getAttribute("CurrentEmployeeIds")它告诉用户是否登录


我在这里过滤:

class LoginFilters {

    def filters = {
        all(controller:'dashboard', action:'*') {
            before = {
                if (session.getAttribute("CurrentEmployeeIds")==null) {
                    redirect(controller:"site",action:"index")
                    return false
                }
            }
            after = { Map model ->

            }
            afterView = { Exception e ->

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望以这样的方式过滤它不过滤controller:"site",action:"index"此网址并过滤其他所有内容.
提前致谢.

grails filter

4
推荐指数
1
解决办法
1万
查看次数

Grails为什么不建议连接提取无单端关联?

我在grails doc中看到了一些关于join fetch的内容:

"这适用于单端关联,但你需要小心一对一.查询将按照你期望的那样工作,直到你想要的结果数量限制为止.你可能会得到比你预期的结果更少的结果.原因很简单,但最终问题出现在使用左外连接的GORM上."

我不明白为什么左外连接可以在无单端关联中引发问题,例如一对多.

能给我举个例子 ?

如果我采取约书亚给出的例子

Class Person {
    String name
    static hasMany = [numbers:PhoneNumber]
    static mapping = {
        nubmers fetch  : 'join'
    }
}

Class PhoneNumber{
     static belongsTo = [owner : Person]
}

//for testing
def person = Person.get(1)
result in: 
select name,... from 
       person left outer join phone_number 
       on person.id = phone_number.owner_id 
       where person.id=1;
Run Code Online (Sandbox Code Playgroud)

你能给我一个查询(在gorm中)可以告诉我这个问题吗?

谢谢

grails join fetch

4
推荐指数
1
解决办法
479
查看次数

html子元素中的grails/sitemesh布局集属性(ng-app)

我有几页共享布局.我正在添加一些将使用角度的新页面.我试图找出如何设置模板,以便在子页面中我可以添加到html元素属性a ng-app='xyz'.

例如

_layout.gsp

<html lang="en"  >
Run Code Online (Sandbox Code Playgroud)

会喜欢做child.gsp -

<html ng-app='angularApp'>
<meta name="layout" content="layout">
Run Code Online (Sandbox Code Playgroud)

但是obv,那是行不通的.有没有简单的方法来实现这一目标?

有没有办法使用内容模式?我试过了...

//child.gsp
<meta name="angularApp" content="angularApp"/>

//layout.gsp
<html lang="en" <%  meta(name: 'angularApp')? "ng-app='${meta(name: 'angularApp')}'":"" %> >
Run Code Online (Sandbox Code Playgroud)

但它只会导致什么......

grails sitemesh angularjs

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

@Builder groovy AST转换

我正在寻找Groovy AST转换,它将在我的类中生成构建器模式代码.

我知道有类似@Canonnical@ToString@EqualsAndHashCode增强自动生成有用的方法,并希望是否会有@GenerateBuilder.我想用它这样的东西:

//Groovy code:
@GenerateBuilder
@CompileStatic
class Person  {
    String name
    int age
    Long id
    String createdBy
}

//then in Java code:
Person p = Person.newBuilder()
    .withName("pawel")
    .withAge(19)
    .withId(11123)
    .withCreatedBy("system")
    .build();
Run Code Online (Sandbox Code Playgroud)

groovy abstract-syntax-tree

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