Grails回报不同的控制器视图

Sap*_*Sap 3 grails redirect controller render gsp

我的问题类似于以下帖子 渲染另一个控制器的视图

我有一个TestConfigController我的问题是我可以做什么,以防验证失败,我想渲染控制器:测试和查看:编辑而不是控制器:testCOnfig和视图:编辑

def save() {

        def testConfigInstance = new TestConfig(params)
        if (!testConfigInstance.save(flush: true)) {
Run Code Online (Sandbox Code Playgroud)

/*而不是查看:"编辑"我想要查看:"/ 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)
    }
Run Code Online (Sandbox Code Playgroud)

有什么指针吗?我已经查看了grails重定向 ,它没有"模型"参数,因此无法将验证错误传递给视图另外我已经查看了没有控制器参数的grails渲染,以便我可以回到不同的控制器!如果需要更多细节/代码,请告诉我

编辑 以下是在使用这两件事之一时发生的

render(view:"/test/edit",  model: [testConfigInstance: testConfigInstance],id:params['test.id'])
Run Code Online (Sandbox Code Playgroud)

上面的代码呈现页面/ test/edit而没有引用testid最终错误地说"test.id"不能为null ..(表示它的渲染/测试/编辑而不是/ test/edit/1)

render(view:"/test/edit/"+params['test.id'],  model: [testConfigInstance: testConfigInstance],id:params['test.id'])
Run Code Online (Sandbox Code Playgroud)

上面的代码导致以下错误

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

以上代码中的任何一个代码只在结尾处呈现"/ test/edit"没有id,因此最终错误地说test.id不能为null.

Anu*_*ora 7

您尝试在视图路径中追加的id值应该是模型映射的一部分.您在模型映射中提供的值在呈现的视图中可用.

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

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

render(view:"/test/edit",  model: [testConfigInstance: testConfigInstance, id:params['test.id']])
Run Code Online (Sandbox Code Playgroud)

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

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


Pet*_*ter 5

Anuj Arora是对的:

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

在你的情况下:

render(view:"/test/edit",  model: [testConfigInstance: testConfigInstance],id:params.test.id)
Run Code Online (Sandbox Code Playgroud)

应该管用.