Wicket - 使用CompoundPropertyModel将默认值设置为Textfield

时间:2012-11-21 20:58:46

标签: forms null wicket textfield default-value

我有一个映射到我的Object的CompoundPropertyModel。

e.g。

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

但是如果对象adresse为null或未设置,我想要一个默认值,例如“”设置为文本字段。

我怎么能这样做?

问候,戴夫

2 个答案:

答案 0 :(得分:3)

setConvertEmptyInputStringToNull(false)应该这样做。

答案 1 :(得分:2)

最简单的方法是确保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。