JSF 1.2:如何在同一视图上的回发中保持请求范围的托管bean活着?

Chr*_*ris 11 jsf scope managed-bean

是否可以在同一页面上的回发中保持请求范围的bean活动?

一般的问题是,当bean在请求结束时被删除并在每个表单提交时重新创建,例如动态操作后面的布尔值disabled,readonly并rendered重置为默认值并导致表单不再像预期的那样工作.

Bal*_*usC 16

我假设会话范围不是一个选项,否则这个问题没有意义.

你可以用战斧<t:saveState>来做.在页面的某处添加以下行:

<t:saveState value="#{bean}" />
Run Code Online (Sandbox Code Playgroud)

RichFaces<a4j:keepAlive>也是如此:

<a4j:keepAlive beanName="#{bean}" />
Run Code Online (Sandbox Code Playgroud)

或者如果有空间,请升级到至少JSF 2.x并将bean放入视图范围:

@ManagedBean
@ViewScoped
public class Bean implements Serializable {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

无论如何,当您回发到同一视图并继续返回null或void从操作方法返回时,同一个bean将存在.

也可以看看:

  • +1"我会假设会话范围不是一个选项,否则这个问题没有意义." 以下回答:) (2认同)

pla*_*nes 0

事实并非如此,除非您将 Bean 存储在某个位置,例如应用程序范围内的 Map,以便稍后检索它。

为什么不直接将其设置为会话范围呢?这就是会话范围的用途,因此同一会话期间的多个请求可以达到相同的状态。