Grails呈现不同控制器的视图



我的问题与下面的帖子类似呈现另一个控制器的视图

我有一个TestConfigController,我的问题是,如果验证失败,我想呈现controller:test and view:edit而不是controller:testCOnfig and view:edit ,我该怎么办

def save() {
        def testConfigInstance = new TestConfig(params)
        if (!testConfigInstance.save(flush: true)) {

/*而不是查看:"edit"我想要查看:"/test/edit",它不起作用*/

            render(view:"edit",  model: [testConfigInstance: testConfigInstance],id:params.test.id)
            return
        }
        println "+++++++++++++++++++++++++"
        flash.message = message(code: 'Data successfully saved', args: [message(code: 'testConfig.label', default: 'Successfully saved')])
        redirect(action: "edit", controller:"test", id:params.test.id)
    }

有指针吗?我已经研究过grails重定向,它没有"model"参数,因此无法将验证错误传递给视图此外,我还查看了没有控制器参数的grails渲染,这样我就可以回到不同的控制器!请让我知道是否需要更多的细节/代码

编辑在使用的两件事中的一件时发生以下情况

render(view:"/test/edit",  model: [testConfigInstance: testConfigInstance],id:params['test.id'])

上面的代码在没有引用testid的情况下呈现页面/test/edit,最终错误地指出"test.id"不能为null。。(指其呈现/测试/编辑,而非测试/编辑/1)

render(view:"/test/edit/"+params['test.id'],  model: [testConfigInstance: testConfigInstance],id:params['test.id'])

上面的代码导致以下错误

The requested resource (/EasyTha/WEB-INF/grails-app/views/test/edit/1.jsp) is not available.

以上代码中的任何一个在结尾处都只显示"/test/edit"没有id,因此最终错误地指出test.id不能为null。

您试图附加在视图路径中的id值应该是模型映射的一部分。在模型贴图中提供的值在渲染的视图中可用。

在您尝试的第一个选项中,id参数没有任何区别,因为render方法不使用任何"id"参数(重定向方法使用id参数来生成重定向url)。

您的代码片段应该是这样的:

render(view:"/test/edit",  model: [testConfigInstance: testConfigInstance, id:params['test.id']])

您在这里使用的渲染方法不会将您重定向到其他操作。render只是将解析后的viewName打印到输出流中。例如,render(视图:"/test/edit")只是渲染edit.gsp视图。它实际上并没有将您重定向到测试控制器的编辑操作。因此,仅仅传递模型映射中的id并不能让您访问视图上的testInstance。您必须获取testInstance By id并将其传递到模型映射中的视图

render(view:"/test/edit",  model: [testConfigInstance: testConfigInstance, testInstance: Test.get(params['test.id'] as Long)])

Anuj Arora是对的:

如果你只想渲染一个任意视图,你可以使用grails app/view文件夹相关视图的完整路径:

在您的情况下:

render(view:"/test/edit",  model: [testConfigInstance: testConfigInstance],id:params.test.id)

应该起作用。

如果您只想渲染视图/test/edit,那么调用render(view:'/test/edit',...)应该就是您所需要的。

如果您还想包含TestControlleredit操作的一些处理,那么请查看chain()调用。它有一个model参数,您可以在其中传递验证错误和controller/action参数以重定向到另一个控制器。

相关内容

  • 没有找到相关文章

最新更新