希望有人可以给我一个关于这个案例的提示,在发布这个问题之前搜索了很多但没有运气。
我有一个只允许单行选择的数据表(一次可能包含200行),选择一行后,commandButton会将用户重定向到新表单以显示一些信息。
当用户首次在任何给定列的数据表中应用过滤器,选择一行并单击commandButton时,问题就会出现,我的辅助bean(@ViewScoped)没有收到任何选定对象(null)
由于表单很大,这里我只发布部分内容来显示Datatable结构:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">
<h:body >
<h:form id="Form1">
<p:outputPanel id="ID1">
.
.
.
<table cellpadding="4" cellspacing="4" border="0" style="width: 100%;">
<tr>
<td><b><big><big><font face="Arial" >#{beanD.MenuTitle} > List of records </font></big></big></b></td>
<td>
<b><big><font face="Arial"><p:outputLabel value="|" /></font></big></b>
</td>
<td style="width: 150px;">
<p:commandButton style="font-family:Arial;font-size: 13px;" icon="ui-icon-check" value="Open Record" ajax="false"
actionListener="#{MBR.Method1(2,MBR.var1.cod,MBR.var1.codS)}" action="#{beanD2.url_Menu('FormRedirected')}"/>
</td>
</tr>
</table>
<table cellpadding="4" cellspacing="4" border="0">
<tr>
<td>
<p:dataTable var="Rad" selectionMode="single" value="#{MBSg.list}"
id="RSTable" widgetVar="RS" selection="#{MBR.var1}" rowKey="#{Rad.codS}"
style="font-family: Arial;font-size: 12px; height: 320px;" emptyMessage="No Records"
scrollable="true" scrollHeight="100%;" frozenColumns="1" styleClass="FirstCol" >
<p:column headerText="Header1" filterStyle="font-family:Arial;font-size: 12px;width:60px;" filterBy="#{Rad.field1}" filterMatchMode="contains" style="font-family:Arial;font-size: 12px;width: 60px;">
<h:outputText value="#{Rad.field1}" />
</p:column>
<p:column headerText="Header2" filterBy="#{Rad.field2}" filterMatchMode="contains" style="font-family:Arial;font-size: 12px;width: 250px;">
<h:outputText value="#{Rad.field2}" />
</p:column>
<p:column headerText="Header3" filterBy="#{Rad.field3}#{Rad.entidades}" filterMatchMode="contains" style="font-family:Arial;font-size: 12px;width: 900px;">
<h:outputText value="#{Rad.field3}" />
</p:column>
<p:column headerText="Header4" filterBy="#{Rad.field4}" filterMatchMode="contains" style="font-family:Arial;font-size: 12px;width: 100px;">
<h:outputText value="#{Rad.field4}" />
<p:column headerText="Header5" filterStyle="font-family:Arial;font-size: 12px;width:70px;" filterBy="#{Rad.field5}" filterMatchMode="contains" style="font-family:Arial;font-size: 12px;width: 120px;">
<h:outputText value="#{Rad.field5}" />
</p:column>
</p:dataTable>
</td>
</tr>
</table>
</p:outputPanel>
</h:form>
</h:body>
</html>
这是我的支持bean(MBR)中的方法,用于评估用户所做的选择(存储在变量var1中)
@ManagedBean(name = "MBR")
@ViewScoped
public class BeanR {
.
.
public void Method1(int proc, int num, int num_s) {
try {
if (var1 == null) {
mbT.setMens("No item Selected");
mbT.warn();
mbT.resetTable("Form1:RSTable");
..."some other operations performed"
} else {
Method2(proc, num, num_s);
}
} catch (ParseException e) {
mbT.setMens("Error in MBR : '" + this.getClass() + ".Method1()' caused by: " + e.getMessage());
mbT.error();
}
}
}
如前所述,如果在过滤后进行选择(然后单击commandButton),则会在我的bean中启动此消息:mbT.setMens(&#34; No item Selected&#34;);
顺便说一下,过滤工作正常,而不是问题。
应用程序是使用Primefaces 5.0开发的,现在没有机会升级
任何周围的工作都会受到赞赏,我用谷歌搜索并阅读PrimeFaces陈列柜,但没有找到任何答案,
最好的问候。
上次更新:
经过大量测试,我发现DataTable的属性 frozenColumns 是在过滤表时导致这种奇怪行为的那个。希望StackOverflow的任何专家都能让我们更深入地了解其背后的原因。
根据我的问题,删除属性后数据表工作正常。希望将来有人发现这个有用。
答案 0 :(得分:0)
我遇到了类似的问题,最终发现我错过了filteredValue
标签中的dataTable
属性。
答案 1 :(得分:0)
将rowKey添加为p:dataTable组件上的属性。
<p:dataTable value="#{myBean.cars}" var="car" rowKey="#{car.id}">
...
<p:dataTable>