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。
这个链接应该 AJAX 调用一个 bean 的方法,该方法应该做一些与点击的行相关的事情。
类似的东西,<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 回答