【问题标题】:Managed Bean property value not rendered during Render Response Phase在呈现响应阶段未呈现托管 Bean 属性值
【发布时间】:2011-04-07 19:07:35
【问题描述】:

我无法弄清楚我做错了什么。请求您的意见。请。

我有一个请求范围的托管 bean,它有一个 List,我在我的 JSF 1.2 Apache my faces 应用程序中将其呈现为数据表。当我提交表单时,由于某些服务器端验证失败,我添加了 FacesMessage 并显示相同的 JSF 页面。

在这个请求-响应周期中,在 INVOKE-APPLICATION 阶段,我能够看到 List 的值,但是当使用 FacesMessage 呈现页面时,数据表是空的。

除此 List / Datatable 之外,其他 bean-properties 及其值都保留在此请求-响应周期中。

这就是在action方法中构造数据表的方式——初始请求

    if(getInputXMLString() != null 
            && getInputXMLString().length() >0)
    {
    List<NodeDetailsVO> nodes = Utility.inputXMLStringNodeDetailsVO(getInputXMLString());
        setSelectedNodes(nodes);
    }

当我在回发请求中尝试与上面相同的操作时(在其他操作方法中),它工作正常。当我在私有方法中添加我的业务逻辑时,如果我在此代码上方或之后调用它,它不起作用。我只在私有方法中使用 List 的 getter。在 getter 方法中 - 我只有在 if 和 else 里面有 sysouts。

这是数据表在 xhtml 页面中的呈现方式:

<h:dataTable width="80%" cellspacing="0" border="1" 
            id="nodes_datatable" cellpadding="2" 
            style="border-collapse:collapse;"
            value="#{createBean.selectedNodes}"
            binding="#{createBean.selectedNodesHTMLDataTable}"
            var="aResult"
            columnClasses="columnAlignRight,columnAlignLeft"
            >

【问题讨论】:

    标签: jsf


    【解决方案1】:

    这不是正常情况。我确实只看到两个可能的原因:

    1. 数据模型(你称之为List)以某种方式被重置。可能 getter 方法不仅仅是返回数据模型并重新加载它,但缺少一些基于请求的参数/条件。

    2. 数据表或其父组件之一具有 rendered 属性,该属性评估了 false

    【讨论】:

    • 感谢 BalusC。 2 不正确。我只是在 getter 中打印列表(DataModel)中对象的大小和值。您能否详细解释一下缺少基于请求的参数/条件?还有其他方法可以在请求范围的 Bean 中保留请求之间的数据表值吗?
    • 这个问题让我觉得该列表根本没有保留。您能否详细说明您在原始问题中的 "In the INVOKE-APPLICATION Phase , I am able to see the values of the List" 到底是什么意思?你是怎么确定的?
    • 在被调用的操作方法中,我使用它的 getter 打印了 List 的值,而且我正在使用 PhaseListener,所以我知道在哪个阶段会发生什么。重新表述 - 如何在请求范围的 bean 中的请求之间保留数据表值?
    • 以与“初始”请求相同的方式加载它。 getter 不只是返回数据吗?
    • getter 只是返回,什么都不做。
    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2015-07-24
    • 2012-05-14
    相关资源
    最近更新 更多