我无法弄清楚我做错了什么。请求您的输入。请。
我有一个请求范围的托管bean,它有一个List,我在我的JSF 1.2 Apache my faces应用程序中呈现为数据表。当我提交表单时,由于有一些服务器端验证失败,我添加了一个FacesMessage并显示相同的JSF页面。
在此请求 - 响应周期中,在INVOKE-APPLICATION阶段,我能够看到List的值,但是当使用FacesMessage呈现页面时,数据表为空。
除了此List / Datatable之外,其他bean属性及其值将保留在此请求 - 响应周期中。
这是在action方法中构建数据表的方式 - 初始请求
if(getInputXMLString() != null
&& getInputXMLString().length() >0)
{
List<NodeDetailsVO> nodes = Utility.inputXMLStringNodeDetailsVO(getInputXMLString());
setSelectedNodes(nodes);
}
当我在回发请求中尝试与上面相同时(在其他操作方法中),它可以正常工作。当我在私有方法中添加我的业务逻辑时,如果我在此代码之上或之后调用它,它不起作用。我只在私有方法中使用List的getter。在getter方法中 - 我只在if和else中使用sysout。
这是数据表在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"
>
答案 0 :(得分:1)
这不是正常情况。我确实只看到两个可能的原因:
数据模型(您调用的List
)已被重置。可能getter方法不仅仅返回数据模型并重新加载它,但是缺少一些基于请求的参数/条件。
数据表或其中一个父组件具有rendered
属性,评估false
。