Grid 向vaadin中可编辑网格中的“取消”按钮添加操作
我正在使用Vaadin 7的可编辑网格。当一行处于编辑模式时,它显示两个按钮:保存和取消 (以防万一,这张照片是从这里拍摄的) 与:Grid 向vaadin中可编辑网格中的“取消”按钮添加操作,grid,vaadin,cancel-button,fieldeditor,Grid,Vaadin,Cancel Button,Fieldeditor,我正在使用Vaadin 7的可编辑网格。当一行处于编辑模式时,它显示两个按钮:保存和取消 (以防万一,这张照片是从这里拍摄的) 与: grid.getEditorFieldGroup().addCommitHandler(new CommitHandler() { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") @Override public voi
grid.getEditorFieldGroup().addCommitHandler(new CommitHandler() {
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
@Override
public void preCommit(CommitEvent commitEvent) throws CommitException{}
@Override
public void postCommit(CommitEvent commitEvent) throws CommitException{}
});
我可以在保存操作中做一些事情。
但是,我可以用取消操作做类似的事情吗
谢谢。这是该部件的严重缺陷。据论坛称,他们正在研究,但目前看来最直接的方法是扩展网格组件并覆盖docancelditor方法。下面是一个片段:
public class MyGrid extends Grid {
protected Object newRow;
@Override
protected void doCancelEditor() {
super.doCancelEditor();
getContainerDataSource().removeItem(newRow);
setEditorEnabled(false);
}
public void setNewRow(Object newRow) {
this.newRow = newRow;
}
请注意,创建行时必须告诉MyGrid对象。另外,请注意,您正在扩展服务器端,因此不必更改客户端(小部件代码),但您确实需要在UI设计中引用新组件。实际上,saveEditor()也应该被覆盖,因为doCancelEditor()似乎也会在保存操作中被调用。我的代码:
public class MyGrid extends Grid {
private boolean addingMode = false;
private JPAContainer<SomeEntity> container;
private Object recentlyAddedItemID;
public MyGrid(Indexed indexed) {
container = indexed;
}
@Override
protected void doCancelEditor() {
Object id = getEditedItemId();
super.doCancelEditor();
if (addingMode) {
getContainerDataSource().removeItem(id);
recentlyAddedItemID = null;
}
addingMode = false;
}
@Override
public void saveEditor() throws FieldGroup.CommitException {
if (addingMode) recentlyAddedItemID = getEditedItemId();
addingMode = false;
super.saveEditor();
}
public Object getRecentlyAddedItemID() {
return recentlyAddedItemID;
}
public void addNewElement(SomeEntity entity) {
addingMode = true;
editItem(container.addEntity(entity));
}
}
MyGrid grid = new MyGrid(JPAContainerFactory.make(SomeEntity.class, entityManager));
grid.addNewElement(new SomeEntity());
/*
if we want to know the new items's ID (actually the new primary key
in case of JPAContainer), we can check it by:
*/
Object id = grid.getRecentlyAddedItemID();
/*
returns null if editor was cancelled and finally nothing new was persisted
*/
公共类MyGrid扩展了Grid{
私有布尔加法模式=false;
私人集装箱;
最近添加的私有对象;
公共MyGrid(索引){
容器=索引;
}
@凌驾
受保护的无效文档编辑器(){
对象id=GetEditEmid();
super.doCancelEditor();
如果(添加模式){
getContainerDataSource().removeItem(id);
recentlyAddedItemID=null;
}
addingMode=false;
}
@凌驾
public void saveEditor()引发FieldGroup.CommitteException{
if(addingMode)recentlyAddedItemID=geteditemid();
addingMode=false;
super.saveEditor();
}
公共对象getRecentlyAddedItemID(){
最近返回addeditemid;
}
public void addNewElement(SomeEntity实体){
addingMode=true;
编辑项(容器.附件(实体));
}
}
MyGrid grid=newmygrid(JPAContainerFactory.make(SomeEntity.class,entityManager));
addNewElement(newsomeEntity());
/*
如果我们想知道新项目的ID(实际上是新的主键
对于JPA容器),我们可以通过以下方式进行检查:
*/
对象id=grid.getRecentlyAddedItemID();
/*
如果编辑器被取消并且最终没有保留任何新内容,则返回null
*/
您到底想做什么?不,FieldGroup没有取消事件。也许您可以实现自己的EditorFieldGroup扩展并在那里处理它?我正在添加一个新的空行,如果单击“取消”按钮,我想删除它。