Java 在Tapestry'中使用自定义类;贝内迪奥特酒店

Java 在Tapestry'中使用自定义类;贝内迪奥特酒店,java,select,tapestry,Java,Select,Tapestry,我有一个类,主要由Strings和一些Doubles组成,我有一个BeanEditor 但是,我希望向该类添加另一个字段,该字段的类型是我的自定义类,我们称之为Bar public class Foo { private String myString; private Double myDouble; private Bar bar; // getters and setters ... } 该字段的允许值是从数据库中提取的,应显示为select控件

我有一个类,主要由
String
s和一些
Double
s组成,我有一个
BeanEditor

但是,我希望向该类添加另一个字段,该字段的类型是我的自定义类,我们称之为
Bar

public class Foo {
    private String myString;
    private Double myDouble;
    private Bar bar;

    // getters and setters
    ...
}
该字段的允许值是从数据库中提取的,应显示为select控件

然而,当我尝试在我的页面中这样做时,就好像
myBar
不存在于我的
Foo
类中

<beaneditor>
    <p:bar>
        <div class="t-beaneditor-row">
            <label>Bar</label>
            <t:select t:id="barSelecter" t:model="barModel" t:value="foo.bar" t:encoder="barEncoder"/>
        </div>
    </p:bar>
</beaneditor>

酒吧

如何实现所需的效果?

您必须将条形属性添加到模型中


例如

您可以为您的类型
编写自己的“BeanEditor”块

public class Foo {
    private String myString;
    private Double myDouble;
    private Bar bar;

    // getters and setters
    ...
}
就像我为我的旅行社做的那样: NamedToSelectTourOperatorBlocks.tml:

<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd" xmlns:p="tapestry:parameter">
     <t:block id="editSelectBar">

            <t:label for="tourOperatorEdit" />
              <t:select 
              value="prop:NamedDTOSelectTourOperatorEditContext.id" 
              t:model="tourOperatorIdsModel" t:validate="required" 
              t:id="tourOperatorEdit" t:blankOption="ALWAYS" 
              t:blankLabel="message:select.blank.label" 
              validate="required" />
        </t:block>
</t:container>
不要忘记在
AdminModule.java
中注册新定义的块:

public static void contributeDefaultDataTypeAnalyzer(final MappedConfiguration<Class<?>, String> configuration) {
  ...
      configuration.add(NamedDTOSelectTourOperator.class, "NamedDTOSelectTourOperator");
...}


    public static void contributeDefaultDataTypeAnalyzer(final MappedConfiguration<Class<?>, String> configuration) {
...
     configuration.add(NamedDTOSelectTourOperator.class, "NamedDTOSelectTourOperator");
...}
公共静态void contributeDefaultDataTypeAnalyzer(最终映射配置,字符串>配置){
...
添加(NamedDTOSelectTourOperator.class,“NamedDTOSelectTourOperator”);
...}

所以,Tapestry只会识别,顺便说一句,创建bean编辑器行,只针对一些预先确定的类集,如
Double
Integer
String
Date
等等?我不是100%确定,但它很可能是由类型是否有编辑块驱动的。也可以贡献(或替代默认值)自定义编辑/显示块。