问题是这样的:
假设dataTable中有记录,其中FruitType为A(表示Apple)和O(表示橙色)。呈现页面时,将过滤Apple的记录。当用户在Orange上过滤并选择第10条记录以便在rowEdit模式下进行编辑时,会在提交更改时调用rowEdit侦听器。在rowEdit侦听器中,rowEditEvent.getObject()给出了Apple Type的第10条记录。
我的代码附在下面......
<p:dataTable value="#{beanDetails.list_FruitDetails}" rowEditListener="#{beanDetails.handleRowEdit}" var="dataItem">
<p:column filterBy="#{dataItem.FRUITTYPE}" filterOptions="#{beanDetails.options}" filterMatchMode="exact">
<f:facet name="header">
<h:outputLabel value="Fruit Type" />
</f:facet>
<h:outputLabel id="fruitType" value="#{dataItem.FRUITTYPE}" />
</p:column>
</p:dataTable>
@ManagedBean(name="beanDetails")
@ViewScoped
public class Fruits implements Serializable{
public Fruits () throws Exception {
private SelectItem[] options;
options = new SelectItem[2];
options[0] = new SelectItem("A", "Apple");
options[1] = new SelectItem("O", "Orange");
}
public List<FruitDetails> list_FruitDetails;
public void handleRowEdit(RowEditEvent re) throws ParseException {
FruitDetails pd = (FruitDetails) re.getObject();
System.out.println(pd.ITEMCODE);
}
}
答案 0 :(得分:1)
这似乎是关于primefaces的一个错误,这个链接声明它已经在最后一个版本上解决了 http://code.google.com/p/primefaces/issues/detail?id=3467
答案 1 :(得分:0)
由于无法克服这个问题,我放弃了让primefaces提供过滤器的想法。现在我提供了selectOneRadio来指定FruitType并在数据表中加载特定Fruit Type的记录。
答案 2 :(得分:0)
经过一整天这个奇怪的bug之后,我和你有同样的问题。终于我找到了答案!
这对我有用:
我的环境:
primefaces 5.3
Mojarra 2.0.2
weblogic 10.3.3
主要问题是当我们在数据表上应用过滤器时,在初始阶段,它通过在 filter()中调用此方法将过滤后的数据存储在视图状态中:
updateValue(filterdData)
过滤后,当我们进行行选择或行编辑时,必须在调用实际方法之前恢复视图,以便使用过滤后的数据更新DataTable类中的数据。
遗憾的是,Mojarra 2.0.2
实施并未处理还原视图阶段作为较新版本,导致DataTable中的数据未更新之前的任何其他版本过滤后的ajax帖子
所以我只需下载新的Mojarra 2.2.8
版本,并在我的weblogic.xml
文件中添加旧版本替换旧版本:
<wls:container-descriptor>
<wls:prefer-application-packages>
<wls:package-name>com.sun.faces.*</wls:package-name>
<wls:package-name>javax.faces.*</wls:package-name>
</wls:prefer-application-packages>
</wls:container-descriptor>
通过这种方法,weblogic服务器将加载新的类文件,并按预期正确处理恢复视图阶段。
<强>更新强>
Mojarra的实现版本不一定完全是2.2.8,实际上,如果你使用像2.5这样的旧版本的servlet,新版本可能会导致其他问题。所以只需使用相应jsf版本的最新Mojarra即可。例如,2.0.11 for jsf 2.0