2012-11-21 1 views
0

내 Object에 매핑되는 CompoundPropertyModel이 있습니다.Wicket - CompoundPropertyModel을 사용하여 기본값을 Textfield로 설정

객체 ADRESSE가 null 또는 설정되지 않은 경우

public class Invoice implements Serializable{ 

    private String adresse; 

    public String getAdresse() { 
     return adresse; 
    } 
    public void setAdresse(String adresse) { 
     this.adresse = adresse; 
    } 
} 

에 그러나

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

지도는 내가 예를 들어, 기본 값을 원하는 ""텍스트 필드로 설정됩니다.

어떻게하면됩니까?

관련, 데이브

답변

3

setConvertEmptyInputStringToNull (false)해야합니다.

+0

멋진! 고마워;) –

2

가장 간단한 것은 Invoice.getAdresse() 대신 null의 빈 문자열을 반환 있는지 확인하는 것입니다. 결국

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

, null가 유효한 값이 아닌 경우는, 그 규칙을 시행 할 수있는 UI 계층의 일이 아니다.

업데이트 : 위젯을 사용해야하는 경우 다른 방법은 모델 체인을 사용하는 것입니다. 먼저 쿼리에 대한 기본값을 설정하는 모델을 만들어야합니다.

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를 해결하기 위해 사용할 수있는 가능한 해킹 중 가장 깨끗합니다.

+0

것은 : POJO 's를 조작하는 것이 허용되지 않았습니다. S는 다른 방법이 없습니까? –

관련 문제