当前位置: 首页 > 知识库问答 >
问题:

Grails 2.3.7使用flash重定向控制器操作。消息、i18n和html标记

南宫嘉
2023-03-14

我使用Grails 2.3.7并想了解以下内容:我有一个控制器,它设置一个flash.message对象,其中包含来自国际化文件(messages.properties)的超文本标记语言标记和没有超文本标记语言标记的args。当我调用渲染时,相应的GSP会按照预期呈现,使用超文本标记语言标记。当我调用重定向到另一个操作时,效果完全相同(调用渲染),渲染的GSP会显示转义的超文本标记语言标记。那么重定向期间flash变量会发生什么?一个简单的println显示没有区别。作为参考,这是我的代码:

控制器:

class DebugController {

    def testFlashEncoding(){
        flash.message=message(code: "debug.flash.test", args: ["inner text with no markup"]) //debug.flash.test=<div style="border:1px solid red;">{0}</div>
        flash.each {
            println("flash in testFlashEncoding(): " + it)
        }
//        redirect(action: "index") //redirects to index(), html is rendered as text
        render view: "testFlashEncoding" //renders testFlashEncoding.gsp, html is interpreted
    }

    def index(){
        flash.each {
            println("flash in index(): " + it)
        }
        render view: "testFlashEncoding" //renders testFlashEncoding.gsp, html is rendered as text

    }
}

普惠制:

<!DOCTYPE html>
<html>
<head>
    <meta name="layout" content="main">
    <title>DEBUG</title>
</head>

<body>
<g:if test="${flash.message}">
    <div class="alert alert-success" role="status">${flash.message}</div>
</g:if>
<g:if test="${flash.error}">
    <div class="alert alert-danger" role="status">${flash.error}</div>
</g:if>
</body>
</html>

因此,当我如上所示调用testFlashEncode()操作时,GSP会在简单文本周围显示红色边框。但是当我使用重定向到index()操作时,GSP会显示

闪存在testFlash编码()中:消息=

闪存索引():消息=

因此flash的内容不会被触摸,但在重定向过程中,Grails有某种开关,告诉渲染引擎逃离flash。消息对象。

为了澄清,我使用了一个新设置的标准grails应用程序,因此我的页面编解码器设置为grails。意见。违约我确实知道更改页面编解码器或强制原始渲染的可能性,我只想知道重定向过程中会发生什么(这种情况在我当前的项目中经常发生)。


共有1个答案

皇甫展
2023-03-14

尝试以下任一方法:

${raw(flash.message)}

<%= flash.message  %>

为我工作。它打印了正确的标记HTML

 类似资料:
  • 我是一个使用ASP.NET MVC5的新手。我需要对控制器进行Jquery调用,以返回一个传递单个参数的新视图。我可以看到很多类似MVC3和之前版本的例子,但却很难找到任何处理MVC4或MVC5并起作用的例子。我所要做的就是从输入元素获取一个值,将其传递给控制器ActionResult,然后打开一个新视图。 PageTwo是视图,Home是控制器。 我试过的代码(包括许多其他代码)通常在404:

  • 我试图重定向到上一页的消息时,有一个致命的错误。 在试图使用访问消息的视图中 但是什么都没有表现出来,我是不是做错了什么?

  • 空操作 空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。 下面的例子用空操作功能实现了一个城市切换的功能。 我们只需要给City控制器类定义一个_empty (空操作)方法: <?php namespace app\index\controller; class City { public fu

  • 问题内容: 我注意到以下代码将用户重定向到项目内的URL, 然而,以下内容已按预期正确重定向,但需要http://或https:// 我希望重定向始终重定向到指 问题答案: 你可以通过两种方式来实现。 第一: 第二:

  • 问题内容: 我有一个Ajax POST发送到我的控制器之一。例如 查询>索引。 在Index()动作中,我返回JSON的ActionResult。 在进行登录检查时,我会执行一条if语句,并且如果activeUser的会话令牌为null,我会执行 但是,这不能正确重定向,而是以浏览器抱怨的JSON返回结果。 如何正确设置重定向,以便如果IF语句失败,它将转到登录页面,否则它将返回我需要的JSON结