JSF p:p中的日历:dataTable:如何获取p:ajax dateSelect事件的行

在我的设置中,我有一个@Named Bean,类ObWithDate是一个带有日期字段validFrom@Entity 。 该类的对象位于bean的List中。 如果用户更改日期,我想立即更新ObWithDatep:dataTable因此显示了几个p:calendar组件:

在此处输入图像描述

  

bean的代码:

 public void up(DateSelectEvent event) { logger.info("DateSelectEvent "+event.getDate()); // How to get the corresponding ObWithDate? } 

这是Primefaces的后续问题p:日历,p:ajax值未更新(一步延迟)但现在针对具体问题: 如何在beans方法中的ajax调用中获取相应的列表项?

您可以通过编程方式解决#{i} (顺便说一下可怕的变量名)。

 FacesContext context = FacesContext.getCurrentInstance(); ObWithDate obWithDate = (ObWithDate) context.getApplication().evaluateExpressionGet(context, "#{i}", ObWithDate.class); // ... 

另一种方法是使用DataModel作为值,以便您可以使用DataModel#getRowData()

 private transient DataModel model; private DataModel getModel() { if (model == null) { model = new ListDataModel(list); } return model; } 

以便您可以在侦听器方法中获取它,如下所示

 ObWithDate obWithDate = model.getRowData(); // ... 

也可以看看:

  • 如何将选定的行传递给dataTable中的commandLink?

@Daniel请添加此作为答案,至少这是一个解决方法

加:)

这可能是某些方向(migth不是:))

 UIComponent ui = (UIComponent) event.getSource(); ui.getParent().findComponent( .... 

设置一个断点并在日食的“观察”中尝试一些…