如何解决JSF 1.2到JSF 2.3战斧,即时存档自己的saveState和组件?
我们有仍然使用JSF 1.2用于MyFaces和战斧一个大的webapp。 JSF本身的迁移似乎是没有什么大问题,但作为战斧不再发展,我们必须摆脱我们所有的saveState和用法。 我知道,我们应该使用Viewscope或类似的作用域删除saveState和但这会导致该行为是我们的saveState和使用不同的问题。 我们只存储在saveState和不整豆内的几个特定的值。
因此,如果我们用范围替换saveState和迁移我们就来测试每一个网站,如果它仍然工程如何要高度重视。
有没有可能开发一个自己的saveState和组件将与JSF2.3工作? 如果是的话,我们只能够取代T:随着东北新组件saveState和和重建时,他们迁移旧观点
解决方法
是否可以开发自己的可与 JSF2.3 一起使用的 savestate 组件?
是的。
以下是基于 <t:saveState>
的原始源代码的启动示例:
@FacesComponent(createTag=true)
public class SaveState extends UIParameter {
public SaveState() {
setRendererType(null);
}
@Override
public Object saveState(FacesContext context) {
Object[] values = new Object[2];
values[0] = super.saveState(context);
if (getValueExpression("value") != null) {
values[1] = getValue();
}
return values;
}
@Override
public void restoreState(FacesContext context,Object state) {
Object values[] = (Object[]) state;
super.restoreState(context,values[0]);
ValueExpression valueExpression = getValueExpression("value");
if (valueExpression != null) {
valueExpression.setValue(context.getELContext(),values[1]);
}
}
}
为了使用它,针对 http://xmlns.jcp.org/jsf/component
的预定义 XML 命名空间声明:
<anyElement ... xmlns:my="http://xmlns.jcp.org/jsf/component">
...
<my:saveState value="#{bean.property}" />
...
</anyElement>
仅此而已。感谢 @FacesComponent
的 createTag=true
功能,您无需在任何 XML 文件中显式注册自定义组件。
另一种方法是使用 OmniFaces <o:inputHidden>
,但这可能需要显式转换器,因为它是作为 HTTP 请求参数而不是通过 JSF 状态传递的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。