Spring Roo列表页面没有显示外键但显示完全依赖行

时间:2013-06-14 10:23:31

标签: spring-roo

当我们使用Spring Roo命令创建Spring MVC页面时使用Oracle DB,它会创建一个列表,其中包含由相应记录替换的外键。

我想只显示外键,不需要用记录替换键。

是否可以选择相同的选项。我无法找出论坛的相同形式。

此致

1 个答案:

答案 0 :(得分:3)

...鉴于

// Spring Roo 1.2.4.BUILD-SNAPSHOT [rev 7c12381] log opened at 2013-06-15 17:13:26
project --topLevelPackage org.foo.bar --projectName baz
jpa setup --provider HIBERNATE --database HYPERSONIC_PERSISTENT 
entity jpa --class ~.db.Customer
field string name
entity jpa --class ~.db.Sale
field string --fieldName description
field number --type java.math.BigDecimal --fieldName amount 
field reference --fieldName customer --type ~.db.Customer --cardinality MANY_TO_ONE 
focus --class ~.db.Customer
field set --fieldName sales --type ~.db.Sale --cardinality ONE_TO_MANY 
web mvc setup
web mvc all --package ~.web 
quit

当您显示客户列表(一方)时,它只显示客户数据。对于销售(多)方,它显示Customer列,其中所有字段的字段值连接在一起(在我们的例子中只是名称)。

以下是相关标签:

<table:table data="${sales}" 
  id="l_org_foo_bar_db_Sale" 
  path="/sales" z="4N/i5ige4wSEk62VRQK6R47NPIQ=">
   ...

   <table:column id="c_org_foo_bar_db_Sale_customer" 
      property="customer" z="v8Cm6lkbb5e5TiYflyqTaRGopvg="/>

   ... 
 </table>

不幸的是,表格和列标签有点棘手。列标记用于呈现每行的表标题和正文,以便table:table标记负责。它不允许像property="customer.id"这样的东西杀死那个策略。

其中一种方法是在ApplicationConversionServiceFactoryBean中“推入”重构Customer的转换器。查看.aj文件并为您的实体提取方法,将其替换为只返回ID的内容:

public Converter<Customer, String> getCustomerToStringConverter() {
  return new Converter<Customer, String>() {
        public String convert(Customer customer) {
            return customer.getId().toString();
        }
    };

问题是每个下拉列表都会获得新值。因此,如果您有一个编辑表单,并且您想在那里引用客户的名称,以便人们可以做出明智的决定,那么它将无法开箱即用。

也有办法解决这个问题。您可以修改更新中的field:select标记并创建销售域的表单 - 添加itemLabel属性以确定下拉列表中显示的字段。它不需要表达式,因此您可能希望创建在必须显示时返回多个字段连接的getter。

我们在RooInAction第6章中介绍了脚手架的那种自定义。但是,最终你可能只想使用直接的Spring MVC切换到自己构建表单 - 你有更多的选项,然后用于视图文件类型,实现模式等...