0

在我的设置中,我有一个@NamedBean,该类ObWithDate是一个@Entity带有 date 字段validFrom的类。此类的对象在List<ObWithDate>bean 中。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 值未更新(一步延迟),但现在针对具体问题:如何在 beans 方法内的 ajax 调用中获取相应的列表项?

4

2 回答 2

1

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

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

另一种方法是使用DataModelas 的值,<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();
// ...

也可以看看:

于 2012-04-23T11:58:57.663 回答
1

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

添加:)

可能是这样的方向(可能不是:))

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

放置一个断点并在日食的“手表”中尝试一些......

于 2012-04-23T12:39:58.767 回答