【发布时间】:2015-12-13 03:02:30
【问题描述】:
我对 PrimeFaces 5.2 和客户端组件更新机制有一些问题
我创建了一个带有触发服务器端方法的按钮的网页。此方法更新对象列表,最后 将使用列表的新内容更新数据表。
<h:form>
...
<p:commandButton value="Add parameters" action="#{adminBean.addParams}"
update=":growl :#{tblSensors.clientId}" />
</h:form>
<h:form>
<p:dataTable id="tblSensors"
var="sensorElem" value="#{adminBean.sensors}"
binding="#{tblSensors}"
>
...
</p:dataTable>
</h:form>
不幸的是,当程序回调结束时,我的数据表没有更新..真诚地我无法找到问题。
调试阶段没有异常,我在 Firebug 的响应数据中什么也没看到。
更新:我看到当bean方法被调用并且一些变量已经改变时;这种变化不是持久的,每次调用方法时都会错过它们
更新 2: 根据要求,我添加了 bean 代码:
@ManagedBean(name="adminBean")
@SessionScoped
public class AdminBean implements Serializable{
private List<Sensor> sensors;
public List<Sensor> getSensors() {
return sensors;
}
public void setSensors(List<Sensor> sensors) {
this.sensors = sensors;
}
//...
@PostConstruct
public void init(){
//...
//initialize sensor list
this.sensors = new ArrayList<Sensor>();
//...
}
//method for adding new sensor
public void addParams(){
try{
//add new sensor element to the list
this.sensors.add(new Sensor(this.param_name,Double.parseDouble(this.min_val),Double.parseDouble(this.max_val),
this.unit, this.selectedChartType, this.selectedFieldType, id_counter++));
}catch(Exception e){
System.out.println("Error "+e.getMessage());
System.out.println("stack "+e.getStackTrace());
}
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO,"Successful", "New sensor added!"));
}
//...
}
更新 3:修复一些命名空间错误。
【问题讨论】:
-
@BalusC : 只是出于好奇,您为什么要更改从我的线程中删除一些元素?
-
@Tiny:好的,我明白了,对不起我的问题
-
因为它们对实际问题没有贡献。删除它们后,您实际上仍然会遇到完全相同的问题。有关如何提出正确问题的其他提示,另请参阅 stackoverflow.com/tags/jsf/info。
-
@BalusC:好的,谢谢BalusC
-
四个字母:mcve(见How to Ask)
标签: jsf jsf-2 primefaces datatable