gpt4 book ai didi

java - JSF p :calendar in p:dataTable: How to get the row of p:ajax dateSelect event

转载 作者:行者123 更新时间:2023-12-02 07:50:33 24 4
gpt4 key购买 nike

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

enter image description here

<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) 的后续问题但现在针对具体问题:如何在bean方法内的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();
// ...

另请参阅:

关于java - JSF p :calendar in p:dataTable: How to get the row of p:ajax dateSelect event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10276602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com