我最近一直在阅读在使用Groovy中的集合时GStringImpls vs Strings 的行为.
我理解这个评价错误的原因......
"${'test'}".equals("test") == false
是由于.equals()合同的对称性要求,但我想知道是否有一个原因GStringImpl不能String立即评估.所以,当我做这样的事情......
"${'someString'}"
我没有得到GStringImpl,我只是得到一个简单的Java String,我可以立即将其用作地图中的关键字,例如.
我知道有一些解决方法,比如
String s = "${'someString'}"
然而,像这样的东西是有点不方便,之间的混淆GStringImpl和String似乎是Groovy的新手大的"疑难杂症".
我的Grails应用程序中有一个相当大的条件闭包,我想在我的应用程序中的几个地方重用它的一部分.我不想复制我需要重用的部分,而是将其定义为一个单独的闭包,并在需要的地方引用它,但我在语法上有点挣扎.
这是一个简化/缩减版本,但基本上我的标准看起来像这样:
def criteriaClosure = {
and {
// filtering criteria that I'd like to reuse in lots of places
or {
names.each { name ->
sqlRestriction(getFilteringSql(name), [someId])
}
}
if (isOrganisationChild(childDefaultGrailsDomainClass)) {
sqlRestriction(getFilteringSql(domain), [someArg])
}
// filtering criteria that's specific to this particular method
sqlRestriction(getSomeOtherSql(), [someOtherArg])
}
}
def criteria = domain.createCriteria()
def paginatedList = criteria.list([offset: offset, max: max], criteriaClosure)
Run Code Online (Sandbox Code Playgroud)
我已经尝试定义我想要作为变量重用的闭包部分,并在我的标准闭包中引用它,但是它定义的限制似乎没有被应用.
def reusableClosure = {
and {
or {
names.each { name ->
sqlRestriction(getFilteringSql(name), [someId])
}
}
if (isOrganisationChild(childDefaultGrailsDomainClass)) …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个HQL查询来获取属于特定组织的用户列表,或者来自特许经营者列表中的任何特许经营者,但是hibernate无法解析它.我无法弄清楚为什么.这是HQL:
from User u where
(u.parentOrganisation = :topLevelOrganisation or u.parentOrganisation in :franchisees)
and u.parentOrganisation.deleted = false
and u.active = true
Run Code Online (Sandbox Code Playgroud)
这是hibernate吐出的错误:
unexpected AST node: {vector} [from com.myapp.User u where (u.parentOrganisation = :topLevelOrganisation or u.parentOrganisation in :franchisees0_, :franchisees
1_, :franchisees2_) and u.parentOrganisation.deleted = false and u.active = true]. Stacktrace follows:
Message: unexpected AST node: {vector} [from com.myapp.User u where (u.parentOrganisation = :topLevelOrganisation or u.parentOrganisation in :franchisees0_, :fr
anchisees1_, :franchisees2_) and u.parentOrganisation.deleted = false and u.active = true]
Run Code Online (Sandbox Code Playgroud)
如果我取出这个or u.parentOrganisation in …
我收到一个NullPointerException非常小的细节,当我试图setServiceAccountUser(ACCOUNT_TO_IMPERSONATE)在我GoogleCredential,构建一个谷歌任务服务对象,然后试图发送一个请求,从任务列表ACCOUNT_TO_IMPERSONATE.
def credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(SERVICE_ACCOUNT_ID)
.setServiceAccountPrivateKeyFromP12File(P12_FILE)
.setServiceAccountScopes(GOOGLE_TASK_SCOPES)
.setServiceAccountUser(ACCOUNT_TO_IMPERSONATE)
.build()
credential.refreshToken()
log.debug("Google Credential Impersonating: ${credential.getServiceAccountUser()}")
def service = new com.google.api.services.tasks.Tasks.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).build()
return service
Run Code Online (Sandbox Code Playgroud)
请注意,credential.getServiceAccountUser()预期的日志ACCOUNT_TO_IMPERSONATE.
在https://github.com/googleads/googleads-java-lib/issues/19中报告了类似的问题
StackTrace :
Caused by: java.lang.NullPointerException at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191)
at com.google.api.client.util.Preconditions.checkNotNull(Preconditions.java:127)
at com.google.api.client.json.jackson2.JacksonFactory.createJsonParser(JacksonFactory.java:96)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:85)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81)
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:88)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.auth.oauth2.Credential.executeRefreshToken(Credential.java:570)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:247)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.api.ads.common.lib.auth.OAuth2Helper.callRefreshToken(OAuth2Helper.java:70)
at com.google.api.ads.common.lib.auth.OfflineCredentials.generateCredential(OfflineCredentials.java:144)
...
Run Code Online (Sandbox Code Playgroud)
错误中缺少详细信息据说是旧版Google任务中的一个问题,但我已升级到最新版本并且没有任何区别.
compile "com.google.api-client:google-api-client:1.19.0"
compile 'com.google.apis:google-api-services-tasks:v1-rev41-1.19.0' …Run Code Online (Sandbox Code Playgroud) SocketTimeoutException如果用户尝试从我的Grails Web应用程序中的上传表单上传大文件,我想在大约1分钟后阻止这种情况发生.我知道这是一个Tomcat的东西,而不是Grails的东西,但我正在努力修改server.xml使用eventConfigureTomcat事件块_Events.groovy.
根据tomcat文档disableUploadTimeout,我应该true在连接器上设置一个属性,但是当我在eventConfigureTomcat块中尝试这个时,我的应用程序启动时出现以下错误:
| Running Grails application
| Error Server failed to start: No such property: disableUploadTimeout for class: org.apache.catalina.connector.Connector (Use --stacktrace to see the full trace)
Run Code Online (Sandbox Code Playgroud)
我的内容_Events.groovy看起来像这样:
eventConfigureTomcat = { tomcat ->
tomcat.connector.disableUploadTimeout = "true"
}
Run Code Online (Sandbox Code Playgroud)
并且该错误确实有意义 - 根据javadoc,disableUploadTimeout该连接器实现上没有属性.
我究竟做错了什么?我应该如何设置此属性,还是有其他方法可以阻止长时间运行的文件上传超时?
我目前正在尝试调试我们的 Web 应用程序的问题 - 我可以在日志中看到一条错误消息,但我无法确定它的来源,尽管我怀疑它来自闭源电子商务提供的类之一我们使用的平台。
我有 JD-Eclipse 反编译器 - 有什么方法可以通过 Eclipse 搜索包含在一个已编译类中的一段文本吗?
我正在尝试重写我页面上的一些链接,以便将它们设为绝对链接,但前提是它们还不是绝对链接。
我正在使用 jQuery,并执行以下操作:
$("a").each(function() {
if (!this.href.startsWith("http")) {
this.href = "http://blah.com" + this.href
}
});
Run Code Online (Sandbox Code Playgroud)
出乎意料的是(对我而言)即使页面源显示 URL 是相对的 ( )也this.href总是返回绝对 URL http://blah.com/somePath( /somePath)。
如何获得 ? 的“真实”值(如页面源代码中所示)href?
我只在 Firefox 19 中尝试过这个。
grails ×4
java ×3
groovy ×2
closures ×1
decompiler ×1
eclipse ×1
equality ×1
file-upload ×1
google-api ×1
hibernate ×1
hql ×1
html ×1
javascript ×1
jquery ×1
oauth-2.0 ×1
string ×1
timeout ×1
tomcat ×1