设置primefaces dataTable的源网段列的Cell可以编辑,当回车键保存时,判断是否输入的网段合法,如果不合法就显示警告信息,并将这个不合法的数据用红色表示。问题是,怎么给这一个cell设定样式。通过给标签设定ID然后在后台代码中找到这个组件设定样式的时候就会让这个列的所有cell都会显示红色。换一种思路,给ID设定值#{strategy.sName}企图以每行数据的不会重复的名称作为ID值,这样后台就会根据ID得到一个特定的cell,但是实践表明,这个ID值时空的,页面报错不能将空的string作为ID值。同样的通过给<p:dataTable>设定属性rowIndexVar="rowIndex"然后让id值为#{rowIndex}也会报空字符串。最后尝试使用rowIndexVar="#{campusFirewallStrategyBean.rowIndex}",然后让id="{campusFirewallStrategyBean.rowIndex}"同样获取的值是空的。

解决方法:

使用cellEdit代替rowEdit方法,因为cellEdit方法中事件对象可以获取行索引。然后通过后台调用JS的方式获得特定cell进行样式设置,如下图。