我有一个简单的问题。我有一个Primefaces数据表。当用户点击一行时,我希望在后端bean中更新所选行的属性。如果提交包含Datatable的表单,可以实现此目的,但我希望异步完成。我已经阅读了这个问题的各种问题,但仍然无法找到解决方案。
这里是一个小例子来演示这个问题:
测试JSF页面:
根据反馈,我已经更新了Datatable,如下所示:
然而,这仍然未调用setter setSelectedValues();我让它们也说:
只有在点击行时才会调用getter方法。有任何想法吗?
这里是一个小例子来演示这个问题:
测试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;
}
}
根据反馈,我已经更新了Datatable,如下所示:
<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方法。有任何想法吗?