当我尝试时,我有一个需要渲染 GSP 的石英作业:
def g = new org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib()
def text = g.render(template: "/templates/myTemplate",
model: [language: language,
product: product])
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
org.quartz.JobExecutionException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request. …Run Code Online (Sandbox Code Playgroud) 我想使用grails导出插件将我的Domain类可导出到xls和csv文件中.
在我名为front.gsp的主要布局中,我做到了:
<!DOCTYPE html>
<html lang="en">
<head>
...
<g:layoutHead />
</head>
<body>
<sec:ifLoggedIn>
<r:require module="export"/>
<export:formats formats="['csv', 'excel', 'ods', 'pdf', 'rtf', 'xml']" action="exportTest" />
...
<g:layoutBody />
<r:layoutResources/>
<script type="text/javascript" src="${resource(dir: 'js', file: 'jquery.min.js')}"></script>
<script type="text/javascript" src="${resource(dir: 'js', file: 'bootstrap.min.js')}"></script>
<script type="text/javascript" src="${resource(dir: 'js', file: 'application.js')}"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
进入我的DomainClassController.groovy,我做到了:
def exportTest() {
if(!params.max) params.max = 10
if(params?.format && params.format != "html"){
response.contentType = grailsApplication.config.grails.mime.types[params.format] response.setHeader("Content-disposition", "attachment; filename=contacts.${params.extension}")
exportService.export(
params.format,
response.outputStream,
ContactDTO.list(params),
[:],
[:])
[contactDTOInstanceList: ContactDTO.list( params …Run Code Online (Sandbox Code Playgroud) 如果这是一个重复的问题,请原谅我。我已经完成了一些具有类似要求的问题/答案,但不知何故同时有点不知所措和困惑。我的要求是:
这是我的 grails 控制器将接收的 JSON:
{
"loginName":"user1",
"timesheetList":
[
{
"periodBegin":"2014/10/12",
"periodEnd":"2014/10/18",
"timesheetRows":[
{
"task":"Cleaning",
"description":"cleaning description",
"paycode":"payCode1"
},
{
"task":"painting",
"activityDescription":"painting description",
"paycode":"payCode2"
}
]
}
],
"overallStatus":"SUCCESS"
}
Run Code Online (Sandbox Code Playgroud)
问题:
如何从请求中检索整个 JSON 字符串?request.JSON 这里可以吗?如果是这样, request.JSON.timesheetJSON 会产生我想要的实际 JSON 作为 JSONObject 吗?
解析从请求中获取的 JSON 对象的最佳方法是什么?是 grails.converters.JSON 吗?或者还有其他简单的解析方法吗?就像某些 API 一样,它会通过自动处理解析将 JSON 作为对象集合返回。或者以编程方式解析 JSON 对象是唯一的方法吗?
就像我说的,如果问题听起来含糊不清,请原谅我。任何好的参考 JSON parsing with grails 在这里也可能会有帮助。
编辑:我现在获取 JSON 字符串的方式发生了变化。我获取 JSON 字符串作为请求参数。
String saveJSON // This holds the above JSON string.
def jsonObject = …Run Code Online (Sandbox Code Playgroud) 我正在使用 hibernate Filter 根据登录来过滤我的域类。
它正在按预期工作
<DomainClass>.findById(<id>)
Run Code Online (Sandbox Code Playgroud)
但它不适合
<DomainClass>.get(<id>).
Run Code Online (Sandbox Code Playgroud)
为什么 get 的第二个版本不使用过滤器?
我有带有 spring security 插件(2.0-RC5)的 grails 2.5.1 应用程序。我想阻止每个用户的当前会话数。我读过一些博客,但它不起作用。(http://www.block-consult.com/blog/2012/01/20/restricting-concurrent-user-sessions-in-grails-2-using-spring -security-core-plugin/ ) 我的 resources.groovy
beans = {
sessionRegistry(SessionRegistryImpl)
concurrencyFilter(ConcurrentSessionFilter,sessionRegistry,'/main/index'){
logoutHandlers = [ref("rememberMeServices"), ref("securityContextLogoutHandler")]
}
concurrentSessionControlStrategy(ConcurrentSessionControlAuthenticationStrategy, sessionRegistry) {
exceptionIfMaximumExceeded = true
maximumSessions = 1
}
}
Run Code Online (Sandbox Code Playgroud)
在我的 boostrap.groovy 中
def init = { servletContext ->
SpringSecurityUtils.clientRegisterFilter('concurrencyFilter', SecurityFilterPosition.CONCURRENT_SESSION_FILTER)
}
Run Code Online (Sandbox Code Playgroud)
和我的 config.groovy 我添加了这个:
grails.plugin.springsecurity.useHttpSessionEventPublisher = true
Run Code Online (Sandbox Code Playgroud)
谢谢..
我正在使用 Grails 2.5.3 版本做一个应用程序。我想外包数据库代码和Log4j的部分。
Log4j 的代码位于外部 .groovy 文件中。该文件不会被用户修改,因此不必是 /classes 目录中的属性文件。对于数据库代码来说,最好的方法是在外部属性文件中包含多个功能,因为将继续作为 /classes 目录中的属性文件。此外,DataSource.groovy 与其余配置一起存在。
然后,我只实现了使用 Log4j conf:
grails.config.locations = ["file:./grails-app/conf/LogConfig.groovy"]
Run Code Online (Sandbox Code Playgroud)
尽管我将文件放在 /grails-app/conf 目录中,但使用类路径不起作用。这不起作用:
grails.config.locations = ["classpath:LogConfig.groovy"]
Run Code Online (Sandbox Code Playgroud)
另外,我添加了两种情况(运行应用程序和战争模式)。但是,当我运行 grails prod war 并部署 Tomcat 时,Logconfig.groovy 无法识别。
grails.config.locations = ["file:./grails-app/conf/LogConfig.groovy",
"classpath:LogConfig.groovy"]
Run Code Online (Sandbox Code Playgroud)
对于数据库代码,我没有实现使用 .properties 文件。我把这个文件放在 grails-app/conf 中,它的内容是:
# DB properties
dataSource.username = xxx
dataSource.password = xxx
dataSouce.driverClassName = xxx
environments.development.dataSource.url = jdbc:mysql://localhost/xxx
environments.test.dataSource.url = jdbc:mysql://localhost/xxx
environments.production.dataSource.url = jdbc:mysql://localhost/xxx
Run Code Online (Sandbox Code Playgroud)
我读过很多教程和博客,但我不知道如何才能做到这一点。
谢谢您的帮助。
完全卸载spring-security-core插件的正确方法是什么?我正在开发一个不再需要登录的Grails应用程序,我想将其删除.
即使我通过以下方式卸载它:
grails uninstall-plugin spring-security-core
已安装插件[spring-security-core-1.1.3],但在应用程序的元数据中找不到,是否要卸载?[y,n]我的选择似乎没有任何影响.
我在启动应用程序时不断收到消息"配置Spring Security ...".
我的grails应用程序应该使用两个插件:shiro和quartz2.
我将两个插件添加到BuildConfig.groovy:
(在那个ide之后下载了它们)
依赖关系中的问题:shiro取决于shiro-quartz:1.2.0和来自org.opensymphony.quartz的shiro-quartz 1.6.1
我想知道为什么但是quartz2正在寻找方法实现到quartz-1.6.1.jar.Quartz2无法找到实现,这就是无法构建项目的原因.我认为quartz2应该在"普通"石英lib中搜索方法实现,比如quartz:1.0-RC7,但他没有.
那么,我怎样才能解决shiro和quartz2插件的冲突?
我听说依赖排除,但我不确定这个sugesstion.
PS与石英(不是quartz2)发生同样的问题
grails quartz-scheduler dependency-management grails-plugin shiro
我自定义grails插件的依赖关系没有被我安装插件的项目继承和解决.
grails maven-install 使插件在mavenLocal()源中可用所以,我一直在尝试创建一个自定义grails插件供我大学内部使用.
我真的很喜欢它,如果将插件放入BuildConfig.groovy文件的插件关闭会自动安装不仅仅是插件,而是在BuildConfig.groovy文件中为插件定义的所有依赖项(或者,在打包后,它的依赖项.groovy文件).
查看说明,我已经在存储库闭包中为我的项目设置了BuildConfig.groovy文件:
flatDir name:'my-plugin', dirs:'/Users/me/workspace-ggts/myplugin'
Run Code Online (Sandbox Code Playgroud)
然后将其添加到插件闭包中:
compile(":grails-my-plugin:0.1")
Run Code Online (Sandbox Code Playgroud)
这确实正确安装了插件,但它没有解决任何插件的依赖项或所需的插件.这是插件的BuildConfig.groovy文件中的三个主要闭包:
repositories {
grailsCentral()
mavenCentral()
mavenRepo "http://www.mygrid.org.uk/maven/repository"
def jbossResolver = new org.apache.ivy.plugins.resolver.URLResolver()
jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/com/sun/media/[module]/[revision]/[artifact]-[revision].[ext]")
jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/javax/media/[module]/[revision]/[artifact]-[revision].[ext]")
resolver jbossResolver
}
dependencies {
compile (
[group:'javax.media', name:'jai-core', version:'1.1.3'],
[group:'com.sun.media', name:'jai-codec', version:'1.1.3']
)
compile "net.java.dev.jai-imageio:jai-imageio-core-standalone:1.2-pre-dr-b04-2013-04-23" //this jar comes from the mygrid mavenRepo
}
plugins {
build(":tomcat:$grailsVersion",
":release:1.0.0") {
export = false
}
compile ":spring-security-core:1.2.7.3"
compile ":wslite:0.7.2.0"
}
Run Code Online (Sandbox Code Playgroud)
如果我使用插件运行grails run-app,它会解决所有这些依赖关系.只有当插件安装到项目时,自动依赖项解析才会失败.
我已经尝试使插件成为maven工件,并将其复制到我的本地存储库.在这些情况下,我flatDir从repositories …
我想在编译时修改一些Grails域类.我最初认为这是Groovy的全局ASTTransformation的工作,因为我不想注释我的域类(本地变换器需要).最好的方法是什么?
我也尝试通过在同一个包中创建我自己的类来模仿DefaultGrailsDomainClassInjector.java,实现相同的接口,但我可能只是不知道如何将它打包在正确的位置,因为我从未看到我的方法被调用.
另一方面,我能够手动创建一个包含已编译的AST转换类的JAR,以及纯Groovy全局转换所需的META-INF/services工件.我把JAR扔进了我的项目的"lib"目录,并成功调用了visit().显然这是一个草率的工作,因为我希望在Grails插件中获得我的AST转换的源代码,如果我不需要,则不需要单独的JAR工件,加上我无法通过拥有这种方法来实现我的Grails插件的"lib"中的JAR,但不得不将它放入Grails应用程序的"lib"中.
这篇文章也有所帮助:Grails 2.1.1 - 如何使用AstTransformer开发插件?
grails ×10
grails-plugin ×10
datasource ×1
dependencies ×1
export ×1
grails-2.2 ×1
grails-3.0 ×1
groovy ×1
ivy ×1
json ×1
log4j ×1
plugins ×1
shiro ×1
spring ×1