以编程方式将sortBy属性添加到primefaces DataTable列
问题描述:
我试图以编程方式将sortBy
属性放入primefaces数据表Column
中。我从DataTable继承,并使用自定义的getColumns()
调用创建自己的列。以编程方式将sortBy属性添加到primefaces DataTable列
遗憾的是似乎有插入sortBy属性栏没有干净的方法,因为该方法却并不知道它是在上下文。
public List<Column> getColumns() {
if (columns == null) {
columns = new ArrayList<Column>();
String[] columnStrings = getShowColumns().split(",");
for (String columnString : columnStrings) {
Column column = getColumnByType(columnString.trim());
if (column != null) {
//here I have to add the sortBy Expression somehow,
//but there is no context to construct it from
//column.setSortBy(ValueExpression)
columns.add(column);
}
}
}
return columns;
}
它似乎很明显对我来说,我我错过了一些东西,但我现在迷失了。 Column
似乎是填充ValueExpression
别的地方,但我不知道在哪里...
我试图通过所有的代码使用调试器,但我不明白当ValueExpression是在原始实现中生成。任何提示赞赏。
答
ValueExpression
对于sortBy
没有存储在任何地方,如果列没有指定sortBy
,这是你的情况。您必须为每个可排序的列创建自己的ValueExpression
。
我假设你知道列的类型和价值,所以你可以试试这个:
Column column = getColumnByType(columnString.trim());
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory elFactory = facesContext.getApplication().getExpressionFactory();
ValueExpression valueExpresion = elFactory.createValueExpression(elContext, column.getValue(), column.getType());
不然,如果你不知道的类型和值:
String valueExprs = "#{data.street}"; // for example
...
Column column = getColumnByType(columnString.trim());
...
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory elFactory = facesContext.getApplication().getExpressionFactory();
ValueExpression valueExpression = elFactory.createValueExpression(elContext, valueExprs, String.class);
现在你可以设置sortBy:
column.setValueExpression("sortBy", valueExpression);
通知使用column.setValueExpression
代替column.setSortBy
- 它会导致更少的麻烦和大多数时间工作。
希望它有帮助!
非常感谢。我不知道我可以在单身人士的背景下使其工作。我仍然没有得到什么时候以及为什么通过引用来传递语境,但这是另一个问题。再次感谢! – devsnd 2012-04-11 09:15:19
不客气。你可以在任何jsf相关的“对象”(比如beans,phaseListeners等等)中抽取上下文。但是,你必须要求在单独的问题中得到更多有经验的用户和像BalusC这样的专业人员的详细答案。 – Fallup 2012-04-11 09:53:36