CUBA初学者问题

创建实体时失败, 检查实体类定义并无异常
image

你看一下项目依赖的CUBA core,是不是有多个版本?
image

检查了一下, 没有多个版本, 也试了试从7.1.13换成了7.2.2, 还是报的同样的错误

或者换一种方式, 我如何能在Edit类里调用这个接口并传参, 参数内容是编辑后的一整条数据
image

你把这个方法提取出来,放到一个Service里面。然后在这个监听器和你的Edit界面都注入这个Service,就可以调用这个方法了。

我换了一种方式, 把方法都写到了Service里, 在界面控制器下的Edit里调用, 还是会报 : com.haulmont.cuba.core.global.Metadata.create(Ljava/lang/Class;)Ljava/lang/Object;, 创建实体错误
image
image

如何回到7.1.1版本

image

你好,用Studio是降不回去的。得手动修改:

ext.cubaVersion = '7.1.1'

然后再把依赖的add-on也降回去:

dependencies {
    ...
    appComponent(...) // 这里找到7.2 以上的组件,都改回 7.1.1
}

针对你的action要打开不同页面的问题,只能用下面的java代码实现,7.1.1 不支持action里面设置screenClass:
假设我们有一个product 实体,在浏览界面 product-browse.xml 中,不需要做任何改动:

<groupTable id="productsTable"
            width="100%"
            dataContainer="productsDc">
    <actions>
        <action id="create" type="create"/> <!--要指定界面的新建操作-->
        <action id="edit" type="edit"/> <!--要指定界面的编辑操作-->
        <action id="remove" type="remove"/>
    </actions>
    <columns>
        <column id="name"/>
    </columns>
    <rowsCount/>
    <buttonsPanel id="buttonsPanel"
                  alwaysVisible="true">
        <button id="createBtn" action="productsTable.create"/>
        <button id="editBtn" action="productsTable.edit"/>
        <button id="removeBtn" action="productsTable.remove"/>
    </buttonsPanel>
</groupTable>

然后在对应的 ProductBrowse.java 中:

  // 注入表格,以便后续获取选择的数据。
  @Inject
  private GroupTable<Product> productsTable;
  // 注入ScreenBuilder,用于打开界面。
  @Inject
  private ScreenBuilders screenBuilders;

  // 表格的新建操作
  @Subscribe("productsTable.create")
  public void onProductsTableCreate(Action.ActionPerformedEvent event) {
      screenBuilders.editor(productsTable)
              .newEntity() // 新建实体
              .withScreenClass(ProductEdit.class) // 这里指定action要打开的编辑页面
              .build()
              .show();
  }

  // 表格的编辑操作
  @Subscribe("productsTable.edit")
  public void onProductsTableEdit(Action.ActionPerformedEvent event) {
      
      if(productsTable.getSingleSelected() == null){
          return;
      }
      
      screenBuilders.editor(Product.class,this)
              .editEntity(productsTable.getSingleSelected()) // 列表中选择的实体
              .withScreenClass(ProductEditNew.class) // 指定编辑action要打开的页面
              .build()
              .show();
  }

检查了下, 还有哪里需要改动版本
build.gradle.txt (10.2 KB)
image

cleanConf 这个task你换成下面这个版本:

    task cleanConf(description: 'Cleans up conf directory') {
        doLast {
            def dir = new File(cuba.tomcat.dir, "/conf/${modulePrefix}")
            if (dir.isDirectory()) {
                ant.delete(includeemptydirs: true) {
                    fileset(dir: dir, includes: '**/*', excludes: 'local.app.properties')
                }
            }
        }
    }

只替换这部分吗?
image
还是报错

你在文件中搜一下,哪里还用到了 appHome 这个变量。贴一下代码,我给你发怎么改

只有一个地方用到了
image

注意看,build.gradle 文件中,有 configure(webModule)configure(coreModule) 两个部分。

  1. cleanConf 这个task在两个部分都有,分别替换为:

core:

    task cleanConf(description: 'Cleans up conf directory') {
        doLast {
            def dir = new File(cuba.tomcat.dir, "/conf/${modulePrefix}-core")
            if (dir.isDirectory()) {
                ant.delete(includeemptydirs: true) {
                    fileset(dir: dir, includes: '**/*', excludes: 'local.app.properties')
                }
            }
        }
    }

web:

    task cleanConf(description: 'Cleans up conf directory') {
        doLast {
            def dir = new File(cuba.tomcat.dir, "/conf/${modulePrefix}")
            if (dir.isDirectory()) {
                ant.delete(includeemptydirs: true) {
                    fileset(dir: dir, includes: '**/*', excludes: 'local.app.properties')
                }
            }
        }
    }
  1. deployConf 只存在 web 中,替换为:
    task deployConf(type: Copy) {
        from file('src')
        include "com/company/cb7/**" //这里要改成你的包名
        into "$cuba.tomcat.dir/conf/${modulePrefix}"
    }

已解决, 谢谢

在idea的哪里可以找到, jmix创建表的按钮, 我已经安装了jmix插件
image
image
image

你的项目是 CUBA,不是Jmix,CUBA插件你已经装了。CUBA创建表:
右键单击data model
image

创建好实体后启动项目会根据实体类上的@Table(name = “SVMS_CAR_REPAIR”)自动创建表吗