【问题标题】:JSF 1.2 to JSF 2.3 with Tomahawk-Savestate own savestate component?带有 Tomahawk-Savestate 自己的 savestate 组件的 JSF 1.2 到 JSF 2.3?
【发布时间】:2021-01-07 14:08:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: jsf tomahawk


    【解决方案1】:

    是否有可能开发一个可以与 JSF2.3 一起使用的自己的保存状态组件?

    是的。

    这是一个基于 <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>
    

    就是这样。感谢@FacesComponentcreateTag=true 功能,您无需在任何XML 文件中显式注册自定义组件。

    另一种方法是使用OmniFaces &lt;o:inputHidden&gt;,但这可能需要一个显式转换器,因为它是作为 HTTP 请求参数而不是通过 JSF 状态传递的。

    【讨论】:

    • 我试试这个。感谢您的回答!
    • 这行得通,谢谢!我现在唯一遇到的问题是在恢复保存状态之前正在评估 jstl-core-tags。
    猜你喜欢
    • 2011-01-20
    • 2015-12-29
    • 2011-03-17
    • 1970-01-01
    • 2012-03-15
    • 2012-08-11
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多