0

行、列、ヘッダー、スタイルなどを正確に制御できる html テーブルをレンダリングする必要があります
。primeFaces panelGrid を次のように使用しています。

<p:panelGrid binding="#{myBean.tableComponent}"/>

私のバッキング Bean には、次のものがあります。

private UIComponent tableComponent;

public UIComponent getTableComponent() {        
    if (tableComponent == null) {
        tableComponent = new PanelGrid();
        populateTableComponent(); // Populate datatable.
    }
    return tableComponent;
}

public void setTableComponent(UIComponent tableComponent) {
    this.tableComponent = tableComponent;
}

private void populateTableComponent() {
    PanelGrid tbl = (PanelGrid) tableComponent;
    //...
    for (MyPojo row : data.getRows) { 
        // ...here I create the row/column UIComponent subtree
    }
}

今、私の問題は次のとおりです。特定の列について、各行に commandLink をレンダリングする必要があります。
このリンクは、クリックされた行に関連する何かを行う必要がある Bean のメソッドを AJAX 呼び出しする必要があります。
のようなものです<p:commandLink action="#{myBean.myFieldClick(***row***)}">が、
どうすれば参照できrowますか?

他のアイデア?

前もって感謝します

4

1 に答える 1

2

varデータ テーブルの属性で定義されているものとまったく同じ変数名を使用するだけです。つまり、バッキング Bean ではなくビュー ファイルに通常書き込む場合とまったく同じ EL 式文字列を書き留めます。

したがって、ビュー内の次のコマンド リンクの例のアクション属性

<p:dataTable ... var="row">
    ...
    <p:commandLink ... action="#{myBean.myFieldClick(row)}">

プログラムで次のように表すことができます

MethodExpression action = createMethodExpression("#{myBean.myFieldClick(row)}", null, Row.class);

このヘルパーメソッドで

public static MethodExpression createMethodExpression(String expression, Class<?> returnType, Class<?>... parameterTypes) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    return facesContext.getApplication().getExpressionFactory().createMethodExpression(
        facesContext.getELContext(), expression, returnType, parameterTypes);
}
于 2012-11-06T17:30:24.950 に答える