Wicket - 将默认值设置为 Textfield with CompoundPropertyModel



我有一个映射到我的对象的CompoundPropertyModel。

例如

final TextField<String> adresseName = new TextField<String>("Adresse");

映射到

public class Invoice implements Serializable{
   private String adresse;
   public String getAdresse() {
       return adresse;
   }
   public void setAdresse(String adresse) {
       this.adresse = adresse;
   }
}

但是,如果对象地址为 null 或未设置,我希望在文本字段中设置默认值,例如"。

我该怎么做?

问候,戴夫

setConvertEmptyInputStringToNull(false) 应该这样做。

最简单的

方法是确保Invoice.getAdresse()返回空字符串而不是null

public String getAdresse() {
   return addresse != null ? adresse : "";
}

毕竟,如果null不是有效值,则 UI 层的工作不是强制执行该规则。

更新:如果您必须为此使用 Wicket,您的另一个选择是使用模型链接。首先,您需要创建一个模型,用于设置查询的默认值。

class HackyModel extends Model {
    public Object getObject() {
        Invoice ret = (Invoice)super.getObject();
        if( ret != null && ret.getAddresse() == null ) {
           ret.setAddresse( "" );
        }
        return ret;
    }
 }

然后将此模型传递给 CompoundPropertyModel 的构造函数。当 Wicket 尝试通过CompoundPropertyModel设置/获取任何字段时,您的模型将首先被调用以检索后备Invoice对象,该对象充当一种过滤器。

这不是一个好的解决方案,因为Model.getObject()不应该修改支持对象,但它可能是您必须用来绕过考虑不周的 POJO 的最干净的黑客。

相关内容

  • 没有找到相关文章