我有一个使用带有Facelets的Spring Web Flow作为视图技术的Web应用程序。我已经设置了上下文参数
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
但我注意到我的会话大小变得非常大。经过进一步调查,我意识到FlowViewStateManager持有对象的极大引用。当我查看这个类的代码时,我看到以下方法
public boolean isSavingStateInClient(FacesContext context) {
if (!JsfUtils.isFlowRequest()) {
return delegate.isSavingStateInClient(context);
}
else {
return false;
}
}
if (!JsfUtils.isFlowRequest()) {
return delegate.isSavingStateInClient(context);
}
else {
return false;
}
}
因此,如果请求是流请求,Web Flow将在服务器端保存JSF视图状态,而不管上下文参数如何。这背后的原因是什么,无论如何我可以用Web Flow存储状态客户端吗?