我有一个映射到我的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或未设置,我想要一个默认值,例如“”设置为文本字段。
我怎么能这样做?
问候,戴夫
答案 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。