0

私のセットアップでは、@NamedBean があり、クラスObWithDate@Entity日付フィールド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>

Bean のコード:

public void up(DateSelectEvent event)
{
  logger.info("DateSelectEvent "+event.getDate());
  // How to get the corresponding ObWithDate?
}

これは、p:ajax 値が更新されていない (1 ステップの遅延) を持つ Primefaces p:calendarの後続の質問ですが、具体的な問題をターゲットにしています:ビーンズ メソッド内の ajax 呼び出しで対応するリスト項目を取得するにはどうすればよいですか?

4

2 に答える 2

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();
// ...

以下も参照してください。

于 2012-04-23T11:58:57.663 に答える
1

@Danielこれを回答として追加してください。少なくともこれは回避策です

追加:)

それは方向かもしれません(そうではないかもしれません:))そのような何か

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

ブレークポイントを配置し、日食の「ウォッチ」でいくつか試してください...

于 2012-04-23T12:39:58.767 に答える