Wicket:标签为默认文本,如果模型为空+ CompoundPropertyModel

时间:2013-02-19 05:43:38

标签: label wicket default-value

我有:

public FooPage( ... ) {
   this.setDefaultModel( new CompoundPropertyModel(new GenericIdLDM( Foo.class, 1)) );
   add(new Label("title"));

我想要$ subj。 我从2007年开始找到这个解决方案(点如下):http://www.mail-archive.com/wicket-user@lists.sourceforge.net/msg29603.html 但是,它不适用于CPM,因为它需要具有模型的构造函数。

我如何才能使其与CPM一起使用?

public class DefaultTextModel extends AbstractReadOnlyModel<String> {

private final IModel<String> delegate;
private final String def;

public DefaultTextModel(String def, IModel delegate) {
    this.def = def;
    this.delegate = delegate;
}

public String getObject() {
    String s = delegate.getObject();
    return (Strings.isEmpty(s)) ? def : s;
}

public void detach() {
    delegate.detach();
}

} 

2 个答案:

答案 0 :(得分:1)

您的标签可以有自定义Converter。我认为更好地反映了你的意图。请参阅示例https://cwiki.apache.org/WICKET/using-custom-converters.html#Usingcustomconverters-InWicket1.4

其他选项可能是JavaScript,检查范围是否为空,然后提供默认值。

答案 1 :(得分:0)

我可以覆盖Label#initModel():

protected IModel<?> initModel() {
    return new DefaultTextModel(defaultModel, super.initModel());
}

更简单的解决方案是覆盖Label#onComponentTagBody()并在那里应用默认文本。

(Sven Meier在邮件列表上回复)