Jsf 在呈现响应阶段未呈现托管Bean属性值

Jsf 在呈现响应阶段未呈现托管Bean属性值,jsf,Jsf,我不知道我做错了什么。请求您的输入。求你了 我有一个请求范围的托管bean,它有一个列表,我在JSF 1.2 Apache my faces应用程序中将其呈现为datatable。当我提交表单时,由于有些服务器端验证失败,我添加了一条FacesMessage并显示相同的JSF页面 在这个请求-响应周期中,在INVOKE-APPLICATION阶段,我能够看到列表的值,但是当使用FacesMessage呈现页面时,datatable是空的 除此列表/数据表外,其他bean属性及其值将保留在此请求-

我不知道我做错了什么。请求您的输入。求你了

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

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

除此列表/数据表外,其他bean属性及其值将保留在此请求-响应周期中

这就是在action方法-initial request中构造datatable的方式

    if(getInputXMLString() != null 
            && getInputXMLString().length() >0)
    {
    List<NodeDetailsVO> nodes = Utility.inputXMLStringNodeDetailsVO(getInputXMLString());
        setSelectedNodes(nodes);
    }
if(getInputXMLString()!=null
&&getInputXMLString().length()>0)
{
List nodes=Utility.inputXMLStringNodeDetailsVO(getInputXMLString());
设置所选节点(节点);
}
当我在回发请求中尝试与上面相同的操作(在其他操作方法中)时,它可以正常工作。当我在私有方法中添加业务逻辑时,如果我在代码上方或之后调用它,它就不起作用。我只在私有方法中使用列表的getter。在getter方法中,if和else中只有sysout

这是datatable在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"
            >

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

  • 数据模型(您所称的
    列表
    )以某种方式被重置。可能getter方法所做的不仅仅是返回数据模型并重新加载它,而是缺少一些基于requestbased的参数/条件

  • datatable或其父组件之一具有一个
    呈现的
    属性,该属性的计算结果为
    false


  • 谢谢你,巴卢斯克。2不是真的。我只是在getter中打印列表(DataModel)中对象的大小和值。你能解释更多关于缺少基于请求的参数/条件的信息吗?在请求范围的Bean中,有没有其他方法可以在请求之间保留datatable值?这个问题让我觉得列表根本没有被保留。您能否详细说明您在最初的问题中“在调用应用程序阶段,我能够看到列表的值”的确切含义?您是如何确定的?在调用的action方法中,我使用它的getter打印列表的值,我也使用PhaseListener,所以我知道在哪个阶段会发生什么。要重新措辞-如何在请求范围bean中的请求之间保留datatable值?请以与“初始”请求相同的方式加载它。getter不只是返回数据吗?getter只返回数据,不做其他事情。