似乎在Grails中或者更好地说Groovy,不可能将日志记录模式设置为记录行号,方法和类名.或者你可以,但你会收到Log4j类的行号和方法名称,如:
%F:%L -? SLF4JLog.java:213
Run Code Online (Sandbox Code Playgroud)
我发现了一个与Grails无关的问题:http: //jira.grails.org/browse/GRAILS-9789
那么如何在Grails中记录这些信息呢?
我有一个私有方法,使用元类在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 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) 什么是将小端数转换为大端数的最佳方法?
def i = 0x12345678;
def j = 0x78563412;
assert i == convert(j) // ?
Run Code Online (Sandbox Code Playgroud)
我知道我可以掩盖字节并重新排序它们但是什么是更加时髦的方式?
我有这样的域类:
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对象不会在数据库中持久存在
我继承了一个部署在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)
但没有设计准确记录战争文物如何受到影响.
我有一个过滤器,我想过滤除了带来登录页面的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 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中)可以告诉我这个问题吗?
谢谢
我有几页共享布局.我正在添加一些将使用角度的新页面.我试图找出如何设置模板,以便在子页面中我可以添加到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)
但它只会导致什么......
我正在寻找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) grails ×8
groovy ×4
grails-orm ×2
angularjs ×1
config ×1
fetch ×1
filter ×1
grails-2.0 ×1
join ×1
log4j ×1
mocking ×1
sitemesh ×1
tomcat ×1
unit-testing ×1