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


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

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


2814
2018-05-05 11:56


起源



答案:


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

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

<t:saveState value="#{bean}" />

RichFaces的 <a4j:keepAlive> 也是一样的:

<a4j:keepAlive beanName="#{bean}" />

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

@ManagedBean
@ViewScoped
public class Bean implements Serializable {
    // ...
}

无论如何,当您回发到同一视图并继续返回时,同一个bean将存在 null 要么 void 来自行动方法。

也可以看看:


16
2018-05-05 12:01



+“我会假设会话范围不是一个选项,否则这个问题没有意义。”以下回答:) - niksvp
+1为 <t:saveState value="#{bean}" /> 和 <a4j:keepAlive beanName="#{bean}" /> 和 JSF2.0 - Jigar Joshi
@niksvp @jigar:总票数是1.谁忘了投票? :) - BalusC
@BalusC啊..我忘了;) - Jigar Joshi
顺便说一句系统没有通知 @niksvp @jigar 对我这个 - Jigar Joshi


答案:


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

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

<t:saveState value="#{bean}" />

RichFaces的 <a4j:keepAlive> 也是一样的:

<a4j:keepAlive beanName="#{bean}" />

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

@ManagedBean
@ViewScoped
public class Bean implements Serializable {
    // ...
}

无论如何,当您回发到同一视图并继续返回时,同一个bean将存在 null 要么 void 来自行动方法。

也可以看看:


16
2018-05-05 12:01



+“我会假设会话范围不是一个选项,否则这个问题没有意义。”以下回答:) - niksvp
+1为 <t:saveState value="#{bean}" /> 和 <a4j:keepAlive beanName="#{bean}" /> 和 JSF2.0 - Jigar Joshi
@niksvp @jigar:总票数是1.谁忘了投票? :) - BalusC
@BalusC啊..我忘了;) - Jigar Joshi
顺便说一句系统没有通知 @niksvp @jigar 对我这个 - Jigar Joshi


不是真的,除非你将Bean存储在某处,例如应用程序范围中的Map,以便稍后检索它。

为什么不把它作为会话范围?这就是Session范围的含义,因此同一Session期间的多个请求可以达到相同的状态。


0
2018-05-05 12:00