在我的设置中,我有@Named
Bean,类ObWithDate
是@Entity
,日期字段 validFrom 。此类的对象位于bean的List<ObWithDate>
中。如果用户更改日期,我想立即更新ObWithDate
。 p:dataTable
因此显示了几个p:calendar
组件:
<h:form id="fUser">
<p:dataTable id="dt" var="i" value="#{myBean.list}">
<p:column>
<p:calendar id="cValidFrom" value="#{i.validFrom}">
<p:ajax event="dateSelect" listener="#{myBean.up}" update=":fUser:dt"/>
</p:calendar>
</p:column>
</p:dataTable>
</h:form>
bean的代码:
public void up(DateSelectEvent event)
{
logger.info("DateSelectEvent "+event.getDate());
// How to get the corresponding ObWithDate?
}
这是Primefaces p:calendar with p:ajax value not updated (one step delay)的后续问题,但现在针对具体问题:如何在beans方法中的ajax调用中获取相应的列表项?
答案 0 :(得分:1)
您可以通过编程方式解决#{i}
(顺便说一下可怕的变量名称)。
FacesContext context = FacesContext.getCurrentInstance();
ObWithDate obWithDate = (ObWithDate) context.getApplication().evaluateExpressionGet(context, "#{i}", ObWithDate.class);
// ...
另一种方法是使用DataModel
作为<p:dataTable>
的值,以便您可以使用DataModel#getRowData()
。
private transient DataModel<ObWithDate> model;
private DataModel<ObWithDate> getModel() {
if (model == null) {
model = new ListDataModel<ObWithDate>(list);
}
return model;
}
以便您可以在侦听器方法中获取它,如下所示
ObWithDate obWithDate = model.getRowData();
// ...
答案 1 :(得分:1)
@Daniel请将此添加为答案,至少这是一种解决方法
添加:)
这可能是方向(migth不是:))像那样
UIComponent ui = (UIComponent) event.getSource();
ui.getParent().findComponent( ....
设置一个断点并在日食的“观察”中尝试一些...