0

我有一个映射到我的对象的 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;
   }
}

但如果对象地址为空或未设置,我希望在文本字段中设置一个默认值,例如“”。

我怎么能那样做?

问候,戴夫

4

2 回答 2

3

setConvertEmptyInputStringToNull(false) 应该这样做。

于 2012-11-22T06:01:03.297 回答
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。

于 2012-11-21T22:44:40.177 回答