【问题标题】:Wicket: Label with default text if model empty + CompoundPropertyModelWicket:如果模型为空 + CompoundPropertyModel,则带有默认文本的标签
【发布时间】:2013-02-26 04:02:43
【问题描述】:

我有:

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();
}

} 

【问题讨论】:

    标签: label wicket default-value


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我可以覆盖 Label#initModel():

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        相关资源
        最近更新 更多