gpt4 book ai didi

java - 以编程方式创建时,Primefaces Datatable sortField null 和过滤器映射 {}

转载 作者:搜寻专家 更新时间:2023-11-01 03:40:43 25 4
gpt4 key购买 nike

当以编程方式(使用绑定(bind)和 valExp)创建惰性数据表时,sortField 始终为 null,sortorder Ascending,filters map {}。即单击排序字段或在筛选字段中键入字符串。

当没有绑定(bind)的情况下完成相同的操作时,所有内容都在 xhtml View 中,一切都像宣传的那样工作。我还查看了 PhaseListener 的加载顺序,但在这两种情况下都没有发现任何不同之处,只是一开始它不起作用。

TestController 是@ViewScoped。尝试使用 PF 版本 3.5、3.4.2、3.3.1、3.3。

我做错了吗?

查看

<p:dataTable binding="#{testController.datatable}" />   

<p:dataTable value="#{testController.testModel}" var="val" rows="5" lazy="true">
<p:column sortBy="#{val}">
#{val}
</p:column>
</p:dataTable>

世代

datatable = new DataTable();
datatable.setValueExpression("lazy",createValueExpression("true", Boolean.class));
datatable.setValueExpression("rows",createValueExpression("10", Integer.class));
datatable.setValueExpression("value",createValueExpression("#{testController.testModel}", DataModel.class));
datatable.setVar("val");


Column column = new Column();
column.setValueExpression("sortBy", createValueExpression("#{val}", String.class));

HtmlOutputText output = (HtmlOutputText) application.createComponent(HtmlOutputText.COMPONENT_TYPE);
output.setValueExpression("value", createValueExpression("#{val}", String.class));

column.getChildren().add(output);

datatable.getChildren().add(column);

模型

public List<String> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
List<String> modelMock = new ArrayList<String>() {
{
add("abc");
add("def");
}
};
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("load()");
}

if (LOGGER.isDebugEnabled()) {
LOGGER.debug("first " + first + " pageSize" + pageSize);

LOGGER.debug("sortField -> " + sortField);
LOGGER.debug("sortOrder -> " + sortOrder);
LOGGER.debug("filters -> " + filters);
}

this.setRowCount(modelMock.size());

return modelMock;
}

调试输出

11:12:24,426 DEBUG TestModel:33 - load()
11:12:24,426 DEBUG TestModel:37 - first 0 pageSize10
11:12:24,426 DEBUG TestModel:39 - sortField -> null
11:12:24,426 DEBUG TestModel:40 - sortOrder -> ASCENDING
11:12:24,426 DEBUG TestModel:41 - filters -> {}

第二个数据表证明当它不与绑定(bind)一起使用时,它是有效的

11:21:25,677 DEBUG TestModel:33 - load()
11:21:25,677 DEBUG TestModel:37 - first 0 pageSize5
11:21:25,677 DEBUG TestModel:39 - sortField -> val
11:21:25,677 DEBUG TestModel:40 - sortOrder -> DESCENDING

最佳答案

binding”元素和“@ViewScoped”范围之间存在问题。您可以在此处阅读更多信息:http://balusc.blogspot.com/2010/06/benefits-and-pitfalls-of-viewscoped.html#HeyTheresPitfallsInTheTitle

一个解决方案,如果你想保留你的绑定(bind)和你当前的范围是为组件启用完整的状态保存。您可以通过将其添加到您的 web.xml

来为指定页面设置它
<context-param>
<!-- For Bug Fixing Viewscope beans with binding component attributes -->
<param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name>
<param-value>/faces/myPageWithBindings.xhtml</param-value>
</context-param>

关于java - 以编程方式创建时,Primefaces Datatable sortField null 和过滤器映射 {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15199363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com