在我的设置中我有一个@Named
豆子,班级ObWithDate
is a @Entity
带有日期字段有效来源。此类的对象位于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>
豆的代码:
public void up(DateSelectEvent event)
{
logger.info("DateSelectEvent "+event.getDate());
// How to get the corresponding ObWithDate?
}
这是后续的问题Primefaces p:calendar 与 p:ajax 值未更新(一步延迟) https://stackoverflow.com/questions/10175371但现在针对具体问题:如何在beans方法内的ajax调用中获取相应的列表项?
你可以解决#{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();
// ...
也可以看看:
- 如何将选定的行传递到 dataTable 内的 commandLink? https://stackoverflow.com/questions/4994458/how-can-i-pass-a-parameter-to-a-commandlink-inside-a-datatable/4994833#4994833
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)