我想要一个grails控制器类中的连接对象的句柄(用groovy编写).我在某处读到了我需要首先获取数据源对象并在其上调用方法getConnection来获取连接对象.
我无法找到如何在grails控制器中获取数据源对象.请帮助.
我有一个URL映射如下:
static mappings = {
name register: "/register" {
controller = "account"
action = "createuser"
}
}
Run Code Online (Sandbox Code Playgroud)
我想从控制器重定向使用这种映射,例如:
redirect mapping:'register'
Run Code Online (Sandbox Code Playgroud)
不幸的是,与createLink标签lib 不同,似乎重定向不接受mapping作为输入参数.
所以我的问题是:如何使用我的命名URL映射进行重定向?
当我从控制器渲染视图时,传递给视图的变量位于视图中呈现的所有模板的范围内,包括嵌套在多个深层的模板.
但是,当我从控制器渲染模板时(如在ajax样式中),只有初始模板似乎可以访问变量,并且嵌套模板调用不共享此信息.例:
Views & Templates:
a.gsp
_b.gsp
_c.gsp
_one.gsp
_two.gsp
_three.gsp
//PasserController.groovy
class PasserController{
def v = {
render(view:"a", model:[time:System.currentTimeMillis()])
}
def t = {
render(template:"one", model:[time:System.currentTimeMillis()])
}
}
//a.gsp
A Time is: ${time}<br />
<g:render template="b" />
//_b.gsp
B Time is: ${time}<br />
<g:render template="c" />
//_c.gsp
C Time is: ${time}<br />
//_one.gsp
One Time is: ${time}<br />
<g:render template="two" />
//_two.gsp
Two Time is: ${time}<br />
<g:render template="three" />
//_three.gsp
Three Time is: ${time}<br />
Run Code Online (Sandbox Code Playgroud)
输出如下:
For passer/v …Run Code Online (Sandbox Code Playgroud) 我正在将我的应用程序从Grails 2.1迁移到2.3.迁移后我遇到了很多错误 - 我想要一些带有Grails 2.3和Spring集成的示例应用程序.
我做了一些HelloWorld示例应用程序,这些都运行正常.但即使我在我的应用程序中应用相同的东西,甚至在它给出错误的地方.因为我的应用程序非常大(100mb)并且我使用了很多与Spring,Hibernate和许多Grails插件的集成.
我没有找到任何类似于"从Grails 2.1迁移到Grails 2.3"的代码级文档.我无法从Grails或在线找到任何示例应用程序.
Grails官方文档,所有关于提供Grails META信息.
在我的main.gsp 229行:
<g:include controller="filter" action="tree"/>
Caused by: org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Error executing tag <g:include>: Unable to execute include: Request processing failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsRuntimeException: java.lang.IllegalStateException: Cannot reset buffer after response has been committed
at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.createGroovyPageException(GroovyPageView.java:205)
at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.handleException(GroovyPageView.java:182)
at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.renderWithTemplateEngine(GroovyPageView.java:153)
at org.codehaus.groovy.grails.web.servlet.view.GroovyPageView.renderMergedOutputModel(GroovyPageView.java:84)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264)
at org.codehaus.groovy.grails.web.sitemesh.SpringMVCViewDecorator.render(SpringMVCViewDecorator.java:67)
... 51 more
Caused by: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <g:include>: Unable to execute include: Request processing failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsRuntimeException: java.lang.IllegalStateException: …Run Code Online (Sandbox Code Playgroud) 我试图使用Grails过滤器将自定义HTTP标头添加到一组特定控制器的响应中:
class ApiFilters {
def filters = {
xwingFilter(uri:'/api/**') {
after = {
response.setHeader('X-Wing', 'foo')
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果控制器呈现视图或文本,则标题将添加到响应中。如果控制器使用“ render as JSON”,则不添加标头。看起来JSON转换器正在关闭输出流并立即发送它。那正确吗?
我可以使用Grails拦截器,但必须在多个控制器中复制它。关于如何实现此目标的任何想法?
我一直在尝试在grails控制器中使用路径变量,但我无法实现它.背后的意图是验证提交给我需要强制的URL的参数.我无法通过RequestParam实现它,所以我切换到PathVariable,以便提交没有所需param的url应该由grails控制器本身过滤掉,而不是我添加if/else检查有效性.
所以,我可以说明如下:我的网址如下: -
'<appcontext>/<controller>/<action>?<paramName>=<something>'
Run Code Online (Sandbox Code Playgroud)
现在,为了使'paramName'成为强制性的,我没有在Grails中找到任何方法(Spring MVC提供了@RequestParam注释,它可以使我''required'为真).
我认为另一种选择是使用路径变量,以便'paramName'可以包含在URL本身中.所以我试着跟随:
'<appcontext>/<controller>/<action>/$paramName'
Run Code Online (Sandbox Code Playgroud)
为了验证上面的URL,我编写了特定的映射,但有些映射不起作用..
以下是我写的具体映射: -
"/<controllerName>/<action>/$paramName" {
controller:<controller to take request>
action:<action to do task>
constraints {
paramName(nullable: false,empty:false, blank: false)
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在控制器中使用类似@PathVariable和@RequestParam的弹簧注释,如下所示: -
def action(@PathVariable("paramName") String param){
//code goes here
}
Run Code Online (Sandbox Code Playgroud) 我的Grails代码有一个搜索功能,在执行findAllBy查询后重定向到另一个控制器操作:
def results = Foo.findAllByBar(baz)
redirect(action: "result", params: [results: results])
Run Code Online (Sandbox Code Playgroud)
findAllByBar按预期返回带有模型的ArrayList,但在重定向之后,接收操作获得一个String数组.更糟糕的是,当只有一个结果时它甚至没有得到一个数组,它只是得到一个字符串.
鉴于我必须在接收视图中迭代结果,在字符串上执行它将仔细地单独打印每个字母.我们都同意这可能不是理想的行为.
我是Grails noob所以请原谅我的noob问题.
我已经创建了一个域类User和Device.用户有许多设备:设备和设备属于用户:用户.
重要的是,只有一个设备永远不会属于两个用户,因此我的UserController代码如下所示:
class UserController {
static allowedMethods = [create: 'POST']
def index() { }
def create() {
def user = User.findByUsername(request.JSON?.username)
def device = Device.findById(request.JSON?.deviceId)
if (device) {
device.user.devices.remove(device)
}
// device can only be owned by 1 person
def new_device = new Device(id: request.JSON?.deviceId, type: request.JSON?.deviceType)
if ( !user ) {
user = new User(
username: request.JSON?.username
)
user.devices = new HashSet() // without this I get null on the add in next line
user.devices.add(new_device)
user.save()
if(user.hasErrors()){ …Run Code Online (Sandbox Code Playgroud) grails grails-orm grails-controller grails-domain-class grails-2.0
嗨,我正在尝试在呈现 json 文件之前在父和子的控制器中执行排序,但我不确定如何去做。这是我所拥有的(原始代码摘录):
class Parent{
static hasMany = [children:Child]
String name
Date dateCreated
}
class Child {
static belongsTo = [parent:Parent]
String name
Date dateCreated
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器 .groovy 文件中,我有:
def list(){
def result = Parent.listOrderByDateCreated(order: "desc")
.... more code ....
withFormat{
json {render result as JSON}
xml {render result as XML}
}
}
Run Code Online (Sandbox Code Playgroud)
并且上述工作(父项按创建日期排序)但我不确定如何按列表中创建的日期对所有子项进行排序。
提前谢谢你的帮助。我也在使用 Grails 2.3.2
grails ×9
grails-2.0 ×3
controller ×1
grails-orm ×1
groovy ×1
parameters ×1
url-mapping ×1
view ×1