2014-06-12 4 views
0

enter image description here GWT 양식에서 선택한 항목에 따라 일부 필드가 변경됩니다. 양식은 Editor, Driver GWT 모듈을 사용합니다.편집하는 동안 GWT 편집기를 변경하는 방법

이야기는 "나는 사용자입니다"또는 "나는 판매자입니다"(결국 "나는 다른 것"입니다)) 자기 자신의 형태에 따라이 선택에 따라보기의 일부 편집자를 변경하고 싶습니다 (이름, 성은 회사 이름, 세금 일련 번호, 다른 많은 필드는 동일하게 유지되지만 변경됩니다 그들의 장소). UiBinder 스크린 2 세트 (각 프로파일에 하나씩)를 만들었습니다. 그리고 체크 박스 내가 지금까지 할 수 있다고 생각 어떤 사람들 subeditors

을 처리하는 "나는 회사 해요"를 포함하는 주요 UiBinder을 내가 subeditors

모두가
@Path("") 
@UiField 
protected CompanyBasicInfo basicInfoComp; 

@Path("") 
@UiField 
protected PersonBasicInfo basicInfoPers; 

와 ValueAwareEditor을 가지고있다가 운전자가 채우지 만 그 중 하나만 보입니다.

것은

내가 많은 에디터에서 동일한 특성을 갖는의 아이디어를 좋아하지하지 않는, 어느 쪽도 성능이 방법은 다른 측면에서

을 의미 수 CompanyBasicInfo 및 PersonBasicInfo 일반 편집기 구현 있다는 것입니다. 그래서 양쪽에 @ Ignore를 두는 것은 불가능합니다. 왜냐하면 내가 원할 때 setValue()를 호출 할 수 없기 때문입니다.

또한 ValueAwareEditor를 구현하는 것은 일반적인 편집기 위젯을 포함하고 있기 때문에 분명하지 않기 때문에 해당 필드에서 setValue()를 호출 할 수는 없습니다. 문제는 한 단계 더 나아갑니다.

뷰에서 드라이버에 대한 액세스 권한이 없기 때문에 edit()를 다시 호출 할 수 있습니다. 목록에서 어떻게 완료되었는지 살펴 보았지만 새로운 개념이 너무 많아서이 간단한 사례를 처리 할 수 ​​있도록 모든 코드를 배울 필요가 없다고 생각합니다.

감사합니다.

+0

ui.xml 파일의 일부 또는 하위 편집기를 추가하여 질문에 대한 배경을 더 많이 제공 할 수 있습니까? 편집하려는 하나의 큰 POJO 객체입니까? –

+0

안녕하세요 Amir, 예 모든 프로필을 호스팅 할 수있는 단일 Pojo를 편집하고 있습니다. 내 UiBinder 코드에는 간단한 필드가 있습니다.관련성이있는 것은 UiBinder를 사용자 선택에 따라 데이터를 전환하고 채우는 방법입니다. (사용자 선택시) –

답변

1

편집기 프레임 워크는 편집기에 전달한 것과 동일한 개체에서 작동하므로 편집 중에 누락 된 부분을 쉽게 추가 할 수 있습니다.

나는 이것이 OptionalFieldEditor 또는 ValueAwareEditor와 Subeditors의 조합으로 해결하려고 노력할 것이라고 생각합니다.

주요 구조 편집기는 다음 적어도 ValueAware

public class PersonEditor implements ValueAwareEditor<Person> 
{ 
    @UiField 
    CompanyBasicInfoEditor companyInfo; 
    @UiField 
    PersonBasicInfoEditor personInfo; 
    @UiField 
    TextBox fooBar; 

    // You may not want to use this, but rather have some other handlers. 
    @UiField 
    Button btnAddPerson; 
    @UiField 
    Button btnAddCompany; 

    @Path("") 
    SimpleEditor<Person> myValue; 

    @Override 
    public void setValue(Person value) { 
     companyInfo.setVisible(value.getCompanyInfo() != null); 
     personInfo.setVisible(value.getPersonInfo() != null); 
    } 

    @UiHandler("btnAddCompany") 
    protected void onAddCompany(ClickEvent ev) { 
     CompanyBasicInfo bci = new CompanyBasicInfo(); 
     myValue.getValue().setCompanyInfo(bci); 
     companyInfo.setValue(bci); // the setValue() function handles the prior unset optional field editor 
    } 

    @UiHandler("btnAddPerson") 
    protected void onAddPerson(ClickEvent ev) { 
     PersonBasicInfo bci = new PersonBasicInfo(); 
     myValue.getValue().setPersonInfo(bci); 
     personInfo.setValue(bci); // the setValue() function handles the prior unset optional field editor 
    } 

[ ... remaining stuff ... ] 
} 

subeditors는 IsEditor<OptionalFieldEditor>을해야 구현할

public class Person implements Serializable 
{ 
    private CompanyBasicInfo companyInfo; // nullable 
    private PersonBasicInfo personInfo; // nullable 
    private String fooBar; 

    [ ... add getters and setters ... ] 
} 

같은 수 있습니다. OptionalFieldEditors의 샘플은 gwtproject 페이지 iirc에서 찾을 수 있습니다.

희망이 전달하는 데 도움이됩니다.

+0

안녕하세요. 제가 수동으로 문제를 처리하고 내가 속한 컨텍스트를 잊어 버렸습니다. '아프다면 그 부분으로 돌아가서, 나는 당신의 제안을 살펴볼 것입니다. 나는 당신이 나를 알지 못했던 OptionalFieldEditor에 소개했기 때문에 upvoted/thik에 대해 (내 기억이 맞다면) –