Java JPA容器通过表单添加项目

Java JPA容器通过表单添加项目,java,vaadin7,jpacontainer,Java,Vaadin7,Jpacontainer,我开始使用瓦丁7。我想使用简单的方法通过Vaadin 7创建许多实体表单和表 我的问题是 有密码 package com; import com.vaadin.addon.jpacontainer.JPAContainer; import com.vaadin.addon.jpacontainer.JPAContainerFactory; import com.vaadin.data.fieldgroup.FieldGroup; import com.vaadin.server.VaadinR

我开始使用瓦丁7。我想使用简单的方法通过Vaadin 7创建许多实体表单和表

我的问题是 有密码

package com;

import com.vaadin.addon.jpacontainer.JPAContainer;
import com.vaadin.addon.jpacontainer.JPAContainerFactory;
import com.vaadin.data.fieldgroup.FieldGroup;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.*;

public class TestVaadinApplication extends UI {

    @Override
    protected void init(VaadinRequest request) {
        VerticalLayout tableLayout = new VerticalLayout();

        final Table table = new Table("table with data from JPAContainer");
        final JPAContainer<UserEntity> userDataSource = JPAContainerFactory.makeJndi(UserEntity.class);
        table.setContainerDataSource(userDataSource);
        table.setSizeFull();
        tableLayout.addComponent(table);
        tableLayout.addComponent(new Button("add user entity", new Button.ClickListener() {
            @Override
            public void buttonClick(Button.ClickEvent event) {

                final Window editEntityWindow = new Window();
                editEntityWindow.setModal(true);
                editEntityWindow.setClosable(true);
                final FieldGroup fieldGroup = new FieldGroup(userDataSource.createEntityItem(new UserEntity()));
                FormLayout formLayout = new FormLayout();
                formLayout.addComponent(fieldGroup.buildAndBind("nameCaption", "name"));
                formLayout.addComponent(fieldGroup.buildAndBind("loginCaption", "login"));
                formLayout.addComponent(new Button("SaveEntity", new Button.ClickListener() {
                    @Override
                    public void buttonClick(Button.ClickEvent event) {
                        try {
                            fieldGroup.commit();
                            editEntityWindow.close();
                            table.refreshRowCache();
                        } catch (FieldGroup.CommitException e) {
                            e.printStackTrace();
                            Notification.show("Error!", Notification.Type.ERROR_MESSAGE);
                        }
                    }
                }));

                editEntityWindow.setContent(formLayout);

                TestVaadinApplication.this.addWindow(editEntityWindow);
            }
        }));


        setContent(tableLayout);
    }
}
package-com;
导入com.vaadin.addon.jpacontainer.jpacontainer;
导入com.vaadin.addon.jpacontainer.JPAContainerFactory;
导入com.vaadin.data.fieldgroup.fieldgroup;
导入com.vaadin.server.vaadin请求;
导入com.vaadin.ui.*;
公共类TestVadin应用程序扩展UI{
@凌驾
受保护的void init(VaadinRequest请求){
VerticalLayout tableLayout=新建VerticalLayout();
最终表格=新表格(“包含JPA容器数据的表格”);
最终的JPAContainer userDataSource=JPAContainerFactory.makeJndi(UserEntity.class);
表.setContainerDataSource(userDataSource);
表1.setSizell();
tableLayout.addComponent(表);
tableLayout.addComponent(新建按钮(“添加用户实体”),新建按钮。单击Listener(){
@凌驾
公共作废按钮单击(Button.ClickEvent事件){
最终窗口编辑器EntityWindow=新窗口();
setModal(true);
editEntityWindow.setClosable(true);
final FieldGroup FieldGroup=new FieldGroup(userDataSource.createEntityItem(new UserEntity());
FormLayout FormLayout=新建FormLayout();
formLayout.addComponent(fieldGroup.buildAndBind(“名称标题”、“名称”));
formLayout.addComponent(fieldGroup.buildAndBind(“logincoption”、“login”));
formLayout.addComponent(新建按钮(“SaveEntity”),新建按钮.ClickListener(){
@凌驾
公共作废按钮单击(Button.ClickEvent事件){
试一试{
提交();
editEntityWindow.close();
table.refreshRowCache();
}catch(FieldGroup.committee){
e、 printStackTrace();
Notification.show(“Error!”,Notification.Type.Error\u MESSAGE);
}
}
}));
setContent(formLayout);
TestVaadinApplication.this.addWindow(editEntityWindow);
}
}));
设置内容(表格布局);
}
}
当我按下SaveEntity按钮时,什么也没有发生——Entity没有添加


Jpa的工作很好。我做错了什么?

您使用的是Vaadin 7.3和JPA容器3.1.1吗。?尝试添加

提交();
在fieldGroup.commit()之后