gpt4 book ai didi

jsf - Primefaces Datatable 不更新选定的行

转载 作者:行者123 更新时间:2023-12-04 23:45:15 25 4
gpt4 key购买 nike

我有一个简单的问题。我有一个 Primefaces 数据表。当用户单击一行时,我希望更新支持 bean 中的 selected rows 属性。如果提交了数据表所在的表单,就可以实现这一点,但我希望它异步发生。我在这里阅读了有关此问题的各种问题,但仍未找到解决方案。

这是一个演示问题的小例子:

测试 JSF 页面:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<p:dataTable var="v" value="#{test.values}" selectionMode="multiple"
selection="#{test.selectedValue}" rowKey="#{v.value}" >
<p:column headerText="Test">
<h:outputText value="#{v.value}" />
</p:column>
</p:dataTable>
</h:body>

支持 Bean:

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.component.menuitem.MenuItem;
import org.primefaces.component.stack.Stack;

@ManagedBean
@ViewScoped
public class Test
{

private Value[] selectedValues;

public List<Value> getValues()
{
List<Value> retVal = new ArrayList<Value>();
retVal.add(new Value("a"));
retVal.add(new Value("b"));
return retVal;
}

public Value[] getSelectedValues() {
return selectedValues;
}

public void setSelectedValues(Value[] selectedValues) {
this.selectedValues = selectedValues;
}
}

以及他们使用的一个简单的 POJO:

public class Value {

private String value;
public Value(String value)
{
this.value = value;
}

public String getValue()
{
return value;
}

public void setValue(String value)
{
this.value = value;
}
}

根据回复,我已经像这样更新了数据表:

    <p:dataTable id="dt" var="v" value="#{test.values}" selectionMode="multiple"
selection="#{test.selectedValues}" rowKey="#{v.value}" >
<p:column headerText="Test">
<h:outputText value="#{v.value}" />
</p:column>
<p:ajax event="rowSelect"/>
<p:ajax event="rowUnselect" />
</p:dataTable>

然而,这仍然无法调用 setter setSelectedValues();我让他们也说:

    <p:ajax event="rowSelect" update="@this" />
<p:ajax event="rowUnselect" update="@this" />

这只会在单击一行时调用 getter。有什么想法吗?

最佳答案

您可以使用 rowSelect <p:ajax> 中的事件.

<p:dataTable ...>
...
<p:ajax event="rowSelect" />
</p:dataTable>

但这在这种情况下意义不大。如果您想 Hook listener 会更有意义或 update属性也是如此。例如

<p:dataTable ...>
...
<p:ajax event="rowSelect" update="menu" />
</p:dataTable>

如果您还想 Hook 取消选择行,请添加另一个 Hook rowUnselect 的行:

<p:dataTable ...>
...
<p:ajax event="rowSelect" />
<p:ajax event="rowUnselect" />
</p:dataTable>

另见:

关于jsf - Primefaces Datatable 不更新选定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13456877/

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