JSF1.2到JSF2.3以及Tomahawk Savestate自己的Savestate组件?

JSF1.2到JSF2.3以及Tomahawk Savestate自己的Savestate组件?,jsf,tomahawk,Jsf,Tomahawk,我们有一个大型Web应用程序,它仍然在使用JSF1.2和Myfaces和Tomahawk。 JSF本身的迁移似乎不是什么大问题,但由于tomahawk不再被开发,我们必须摆脱所有的savestate用法。 我知道我们应该使用Viewscope或类似的作用域来删除savestate,但这会导致一个问题,即行为与我们的savestate用法不同。 我们只在savestate中存储了一些特定的值,而不是整个bean 因此,如果我们通过使用作用域替换savestate进行迁移,我们必须测试每个站点是否仍

我们有一个大型Web应用程序,它仍然在使用JSF1.2和Myfaces和Tomahawk。 JSF本身的迁移似乎不是什么大问题,但由于tomahawk不再被开发,我们必须摆脱所有的savestate用法。 我知道我们应该使用Viewscope或类似的作用域来删除savestate,但这会导致一个问题,即行为与我们的savestate用法不同。 我们只在savestate中存储了一些特定的值,而不是整个bean

因此,如果我们通过使用作用域替换savestate进行迁移,我们必须测试每个站点是否仍然可以正常工作

有没有可能开发一个自己的savestate组件来与JSF2.3一起使用? 如果是,我们可以用新组件替换t:savestate,并在重建旧视图时迁移它们

有没有可能开发一个自己的savestate组件来与JSF2.3一起使用

下面是一个基于
原始源代码的启动示例:

@FacesComponent(createTag=true)
公共类SaveState扩展了UIParameter{
公共存储状态(){
SetRenderType(空);
}
@凌驾
公共对象保存状态(FacesContext上下文){
对象[]值=新对象[2];
值[0]=super.saveState(上下文);
if(getValueExpression(“value”)!=null){
值[1]=getValue();
}
返回值;
}
@凌驾
public void restoreState(FacesContext上下文,对象状态){
对象值[]=(对象[])状态;
super.restoreState(上下文,值[0]);
ValueExpression=getValueExpression(“值”);
if(valueExpression!=null){
valueExpression.setValue(context.getELContext(),值[1]);
}
}
}
要使用它,请根据预定义的XML名称空间
http://xmlns.jcp.org/jsf/component

不需要在任何XML文件中显式注册自定义组件


另一种选择是使用,但这可能需要显式转换器,因为它是作为HTTP请求参数传递的,而不是通过JSF状态传递的。

我会尝试一下。谢谢你的回答!这很有效,谢谢!我现在遇到的唯一问题是,jstl核心标记在savestate恢复之前进行评估。