我需要渲染一个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
?
其他想法?
提前谢谢
答案 0 :(得分:2)
只需使用与数据表的var
属性中定义的完全相同的变量名称。换句话说,写下与通常在视图文件中而不是在辅助bean中写入时完全相同的EL表达式字符串。
因此,视图中的以下命令链接示例的action属性
<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);
}