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

Flash scope如何帮助实现JSF2中的PostRedirectGet(PRG)模式。0

松景铄
2023-03-14

我在读Balusc关于JSF中PRG模式的博客,其中提到:

本文针对JSF 1.2。对于JSF 2.0,使用新的Flash范围可以更轻松地实现这一点。

我想了解flash范围如何帮助我们实现相同的目标?

共有1个答案

封俊艾
2023-03-14

在呈现响应阶段之前,使用true调用Flash#setKeepMessages(),以指示JSF将faces消息存储在Flash作用域中,并将faces redirect=true查询字符串参数添加到结果中以执行重定向。

public String submit() {
    // ...

    FacesContext context = FacesContext.getCurrentInstance();
    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success!", null));
    context.getExternalContext().getFlash().setKeepMessages(true);
    return "nextpage?faces-redirect-true";
}

这样,就不需要一个阶段侦听器,该侦听器从faces上下文收集faces消息,并在重定向之前将其存储在会话中,然后在第一个下一个请求时将其从会话中删除,并在重定向之后将其重新添加到faces上下文中。

闪存范围的工作方式大致相同。消息通过唯一标识符存储在会话中,该标识符又在响应中作为cookie传递,并且这些消息(和cookie)在第一个下一个请求中从会话中删除,该请求已将cookie传回(毕竟,这是一个更强大的实现,尽管最终用户在同一时刻在同一会话上发送2个HTTP请求的可能性很小——或者它必须是机器人)。

 类似资料:
  • 抽象是隐藏实现细节并仅向用户显示功能的过程。 另一种方式是,它只向用户显示重要的东西,隐藏内部细节。下面是一个创建抽象类并重写抽象方法的示例。但我不明白的是,它是如何隐藏实现细节的?

  • 我正在做的是为一副牌中的每张牌创建一个图像视图。对于每个图像视图,我添加了两个事件setOnDragOver和setondragdroped。然而,当我点击并试图拖动一张卡片时,我的活动打印声明甚至没有显示。 我试图做的是允许在窗格上拖动一张卡。因此,根据我拖动它的位置更改位置,但它仍然在窗口上。下面是图像视图的事件。 这个是为了脱线

  • 安全模式 此预发行版本中引入了一项新功能,允许您在出现错误而无法启动 Illustrator 时,从这些错误中恢复。 倘若遇到导致 Illustrator 在启动时崩溃的情况。例如,字体损坏、增效工具错误或首选项文件损坏。如果启动失败,则在下次尝试启动时,可以选择以“安全模式”启动 Illustrator。Illustrator 启动时将检查是否存在任何导致错误的文件。以“安全模式”启动 Illu

  • 这里的任务是,我得到输入字符串,例如树,并根据频率排序,输出应该是,因为e重复2次和t, r频率是1. 我有这个代码,什么是它遍历字符串,把所有字符在字符串中的Hashmap与他们的频率和优先级队列用于排序他们降序,之后的结果是采取在字符串生成器, 但我需要一些帮助来理解优先级队列参数中使用的lambda函数。这是我的功能。 有人能用函数中的“树”来解释流程吗

  • SchemaRegistry 有助于与需要写入架构来解码接收到的消息的使用者共享用于对消息进行编码的写入 Avro 架构。另一个重要功能是协助架构演变。 假设生产者P定义了存储在逻辑模式S下的写Avro模式v1,消费者C1定义了读(投影)模式v1,另一个消费者C2定义了它自己的读(投影)模式。读取模式不共享,因为Avro在本地使用它们将消息从编写器模式转换到读取器模式。 想象一下没有任何突破性变化

  • 嗨,我是Kotlin世界的新手。我喜欢到目前为止所看到的,并开始考虑将我们在应用程序中使用的一些库从Java转换为Kotlin。 第二次更新:问题是如何用Kotlin中的一些参数为一个简单的pojo编写一个构建器设计模式?下面的代码是我的尝试,方法是编写java代码,然后使用eclipse-kotlin-plugin转换为Kotlin。