【问题标题】:JSF p:calendar in p:dataTable: How to get the row of p:ajax dateSelect eventJSF p:calendar in p:dataTable: 如何获取 p:ajax dateSelect 事件的行
【发布时间】:2012-05-03 19:57:58
【问题描述】:

在我的设置中,我有一个@Named Bean,ObWithDate 类是一个带有日期字段validFrom 的@Entity。此类的对象位于 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)的后续问题,但现在针对具体问题:如何在bean方法内部的ajax调用中获取相应的列表项?

【问题讨论】:

  • 它可能是方向(可能不是:))类似 UIComponent ui = (UIComponent) event.getSource(); ui.getParent().findComponent( .... 放置一个断点并在eclipse的“watch”中尝试一些...
  • @Daniel 请将此添加为答案,至少这是一种解决方法

标签: java ajax jsf-2 primefaces


【解决方案1】:

您可以通过编程方式解析#{i}(顺便说一下,这个变量名很糟糕)。

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

另一种方法是使用DataModel 作为&lt;p:dataTable&gt; 的值,以便您可以使用DataModel#getRowData()。

private transient DataModel<ObWithDate> model;

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

这样就可以在listener方法中获取如下

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

另见:

【讨论】:

  • 确实,#{i} 很糟糕,但仅用于 SOF 的缩短示例;-) 虽然我不完全理解 为什么,但它正在工作。感谢您的支持!
【解决方案2】:

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

添加:)

可能是方向(可能不是:))类似的东西

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

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

【讨论】:

  • 虽然BalusC提供了更优雅的方式,但是通过这个方案还是可以得到ui.getParent().getId()的行索引。
猜你喜欢
  • 2016-07-20
  • 2014-12-26
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2020-04-26
  • 1970-01-01
相关资源
最近更新 更多