Java 如何更改Wicket中AjaxEditableLabelColumn单元格的颜色
我有一个带有Java 如何更改Wicket中AjaxEditableLabelColumn单元格的颜色,java,wicket,Java,Wicket,我有一个带有onChange方法的AjaxEditableLabelColumn。我需要更改刚刚编辑的单元格的背景色。 代码如下: private AjaxEditableLabelColumn CreateMeditableColumn(字符串属性表达式,布尔可排序){ AjaxEditableLabelColumn=新的AjaxEditableLabelColumn(propertyExpression,可排序){ 私有静态最终长serialVersionUID=1L; @凌驾 受保护的vo
onChange
方法的AjaxEditableLabelColumn
。我需要更改刚刚编辑的单元格的背景色。
代码如下:
private AjaxEditableLabelColumn CreateMeditableColumn(字符串属性表达式,布尔可排序){
AjaxEditableLabelColumn=新的AjaxEditableLabelColumn(propertyExpression,可排序){
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void onChange(AjaxRequestTarget目标,IModel模型){
用户newRecord=model.getObject();
if(newRecord.hasChanged()){
if(newRecord.isRight()){
((转绿)))
}否则{
(((()()))
}
}否则{
((去除颜色)))
}
}
};
返回列;
}
最简单的解决方案是在单元格中添加一个AttributeModifier并刷新它。AjaxEditableLabelColumn看起来像一个自定义实现,所以我猜有一点:
@Override
protected void onChange(AjaxRequestTarget target, IModel<User> model) {
User newRecord = model.getObject();
if (newRecord.hasChanged()) {
if (newRecord.isRight()) {
item.add(new AttributeModifier("style", "background-color:green;"));
} else {
item.add(new AttributeModifier("style", "background-color:red;"));
}
} else {
item.add(new AttributeModifier("style", ""));
}
target.add(item); //refreshing
}
@覆盖
受保护的void onChange(AjaxRequestTarget目标,IModel模型){
用户newRecord=model.getObject();
if(newRecord.hasChanged()){
if(newRecord.isRight()){
添加(新的属性修改器(“样式”,“背景色:绿色;”);
}否则{
添加(新的属性修改器(“样式”,“背景色:红色;”);
}
}否则{
添加(新的AttributeModifier(“样式”,“样式”);
}
target.add(item);//刷新
}
显然,通过使用模型和/或覆盖AttributeModifier的newValue方法,您可以使这一点更加可靠。我建议您只添加一个属性修饰符行为,并更改css类或样式属性的模型 代码:
private AjaxEditableLabelColumn<User, String> createMyEditableColumn(String propertyExpression, boolean sortable) {
final IModel<String> cssModel = Model.of("bkg-default");
AjaxEditableLabelColumn<User, String> column = new AjaxEditableLabelColumn<User, String>(propertyExpression, sortable) {
private static final long serialVersionUID = 1L;
@Override
protected void onChange(AjaxRequestTarget target, IModel<User> model) {
User newRecord = model.getObject();
if (newRecord.hasChanged()) {
if (newRecord.isRight()) {
cssModel.setObject("bkg-green");
} else {
cssModel.setObject("bkg-red");
}
} else {
cssModel.setObject("bkg-default");
}
}
// The following line is unnccessary if you already add
// component for to be render in AjaxEditableLabelColumn
target.add(this);
};
column.add(new AttributeModifier("css", cssModel));
return column;
}
.bkg-default { background-color: transparent; }
.bkg-green { background-color: green; }
.bkg-red { background-color: red; }
我看不出这是一个Wicket类:它是什么?我猜@Mot4创建了自己的类,对吗?我不建议多次添加相同的行为。在这种情况下,它会在每次单击或触发AJAX更改事件时添加该行为。这意味着您创建了太多的实例,在到达最后一个实例之前,这些实例只是替换标记属性映射中的同一个键。对于这种情况,使用模型是更好的解决方案。