Java Wicket:在一个组件中使用CompoundPropertyModel的属性两次

Java Wicket:在一个组件中使用CompoundPropertyModel的属性两次,java,wicket,Java,Wicket,我有一个POJO(当然这是一个简化的示例) 我想在组件中使用两次,如下所示: public class PojoPanel extends GenericPanel<Pojo> { private static final long serialVersionUID = 1L; public PojoPanel(String id) { super(id); add(new Label("property")); ad

我有一个POJO(当然这是一个简化的示例)

我想在组件中使用两次,如下所示:

public class PojoPanel extends GenericPanel<Pojo> {
    private static final long serialVersionUID = 1L;

    public PojoPanel(String id) {
        super(id);
        add(new Label("property"));
        add(new MultiLineLabel("property"));
    }

}
公共类PojoPanel扩展了GenericPanel{
私有静态最终长serialVersionUID=1L;
公共PojoPanel(字符串id){
超级(id);
添加(新标签(“属性”);
添加(新的多行标签(“属性”));
}
}
带有一些标记:

<?xml version="1.0" encoding="UTF-8" ?>
<wicket:panel xmlns:wicket="http://wicket.apache.org">
    <span wicket:id="property"></span><div wicket:id="property"></div>
</wicket:panel>

父组件有一个
CompoundPropertyModel
模型,因此
“property”
ID将确保使用Pojo的
属性


这门课会给你一些问题;但是我想知道除了给
multillelabel
一个不同的标记id和一个模型之外,是否还有一个好的快捷方式

组件ID在组件层次结构的同一级别上必须是唯一的。这意味着您不能使用具有相同id的两个组件,但您希望这样做,因为属性是按化合物的模型类型解析的

解决示例的最简单方法是

public class PojoPanel extends GenericPanel<Pojo> {
    private static final long serialVersionUID = 1L;

    public PojoPanel(String id) {
        super(id);
        add(new Label("property"));
    }

    protected void onInitialize() {
        super.onInitialize();
        add(new MultiLineLabel("Xproperty", new PropertyModel(getDefaultModel(), "property")));
    }

}
公共类PojoPanel扩展了GenericPanel{
私有静态最终长serialVersionUID=1L;
公共PojoPanel(字符串id){
超级(id);
添加(新标签(“属性”);
}
受保护的void onInitialize(){
super.onInitialize();
添加(新的多行标签(“Xproperty”,新的PropertyModel(getDefaultModel(),“property”));
}
}
带关联标记

<?xml version="1.0" encoding="UTF-8" ?>
<wicket:panel xmlns:wicket="http://wicket.apache.org">
    <span wicket:id="property"></span><div wicket:id="Xproperty"></div>
</wicket:panel>

在组件层次结构的同一级别上,组件ID必须是唯一的。这意味着您不能使用具有相同id的两个组件,但您希望这样做,因为属性是按化合物的模型类型解析的

解决示例的最简单方法是

public class PojoPanel extends GenericPanel<Pojo> {
    private static final long serialVersionUID = 1L;

    public PojoPanel(String id) {
        super(id);
        add(new Label("property"));
    }

    protected void onInitialize() {
        super.onInitialize();
        add(new MultiLineLabel("Xproperty", new PropertyModel(getDefaultModel(), "property")));
    }

}
公共类PojoPanel扩展了GenericPanel{
私有静态最终长serialVersionUID=1L;
公共PojoPanel(字符串id){
超级(id);
添加(新标签(“属性”);
}
受保护的void onInitialize(){
super.onInitialize();
添加(新的多行标签(“Xproperty”,新的PropertyModel(getDefaultModel(),“property”));
}
}
带关联标记

<?xml version="1.0" encoding="UTF-8" ?>
<wicket:panel xmlns:wicket="http://wicket.apache.org">
    <span wicket:id="property"></span><div wicket:id="Xproperty"></div>
</wicket:panel>

在组件层次结构的同一级别上,组件ID必须是唯一的。这意味着您不能使用具有相同id的两个组件,但您希望这样做,因为属性是按化合物的模型类型解析的

解决示例的最简单方法是

public class PojoPanel extends GenericPanel<Pojo> {
    private static final long serialVersionUID = 1L;

    public PojoPanel(String id) {
        super(id);
        add(new Label("property"));
    }

    protected void onInitialize() {
        super.onInitialize();
        add(new MultiLineLabel("Xproperty", new PropertyModel(getDefaultModel(), "property")));
    }

}
公共类PojoPanel扩展了GenericPanel{
私有静态最终长serialVersionUID=1L;
公共PojoPanel(字符串id){
超级(id);
添加(新标签(“属性”);
}
受保护的void onInitialize(){
super.onInitialize();
添加(新的多行标签(“Xproperty”,新的PropertyModel(getDefaultModel(),“property”));
}
}
带关联标记

<?xml version="1.0" encoding="UTF-8" ?>
<wicket:panel xmlns:wicket="http://wicket.apache.org">
    <span wicket:id="property"></span><div wicket:id="Xproperty"></div>
</wicket:panel>

在组件层次结构的同一级别上,组件ID必须是唯一的。这意味着您不能使用具有相同id的两个组件,但您希望这样做,因为属性是按化合物的模型类型解析的

解决示例的最简单方法是

public class PojoPanel extends GenericPanel<Pojo> {
    private static final long serialVersionUID = 1L;

    public PojoPanel(String id) {
        super(id);
        add(new Label("property"));
    }

    protected void onInitialize() {
        super.onInitialize();
        add(new MultiLineLabel("Xproperty", new PropertyModel(getDefaultModel(), "property")));
    }

}
公共类PojoPanel扩展了GenericPanel{
私有静态最终长serialVersionUID=1L;
公共PojoPanel(字符串id){
超级(id);
添加(新标签(“属性”);
}
受保护的void onInitialize(){
super.onInitialize();
添加(新的多行标签(“Xproperty”,新的PropertyModel(getDefaultModel(),“property”));
}
}
带关联标记

<?xml version="1.0" encoding="UTF-8" ?>
<wicket:panel xmlns:wicket="http://wicket.apache.org">
    <span wicket:id="property"></span><div wicket:id="Xproperty"></div>
</wicket:panel>


是的,我自己也想到了这个解决方案——尽管我必须说,
PropertyModel
看起来像是一个很好的捷径,可以让模型初始化保持惰性(如果这有意义的话)。是的,你在这件事上是绝对正确的。只是PropertyModel允许您调用构造函数,而不知道其父级的模型,这有时可能会有所帮助。祝你好运:-)是的,我自己也想到了这个解决方案-尽管我必须说
PropertyModel
看起来像是一个让模型初始化保持惰性的好捷径(如果这有意义的话)。是的,你在这件事上是绝对正确的。只是PropertyModel允许您调用构造函数,而不知道其父级的模型,这有时可能会有所帮助。祝你好运:-)是的,我自己也想到了这个解决方案-尽管我必须说
PropertyModel
看起来像是一个让模型初始化保持惰性的好捷径(如果这有意义的话)。是的,你在这件事上是绝对正确的。只是PropertyModel允许您调用构造函数,而不知道其父级的模型,这有时可能会有所帮助。祝你好运:-)是的,我自己也想到了这个解决方案-尽管我必须说
PropertyModel
看起来像是一个让模型初始化保持惰性的好捷径(如果这有意义的话)。是的,你在这件事上是绝对正确的。只是PropertyModel允许您调用构造函数,而不知道其父级的模型,这有时可能会有所帮助。祝你好运:-)