2010-06-25 1 views
2

wicket의 일부 구성 요소가 양식과 연결되어있는 것으로 보이지만 실제로 양식을 제출할 수 없습니다.Wicket : RadioChoice 구성 요소에서 양식 제출을 호출합니다. 무엇이 누락 되었습니까?

예를 들어, 나는 "submitlink"또는 버튼을 만들 수 및 해당 구성 요소 제출 : 위의 작동

return new SubmitLink(id, form) { 
    @Override 
    public void onSubmit() { 
    this.setResponsePage(pageClass); 
    } 
    }; 

합니다.

변경시 라디오 선택에 대한 제출을 수행 할 수 있기를 원합니다. 예 :

new OnChangeHandler() {  

    @Override 
    public void onChange(final Object sel) {  
     // On submission, submit back to form 
     setResponsePage(Page.class); 
    } 

// MY CONTAINER IS NOT A FORM BUT A CHILD OF A FORM (E.g. FORM -> PANEL -> RADIOCHOICE 

public RadioChoice addRadioGroup(final WebMarkupContainer container, final Object modelObject, 
    final String groupName, final String propFieldName, final String [] optionsArr, final OnChangeHandler handler) { 

    final RadioChoice radioGroupYesNo = new RadioChoice(groupName, new PropertyModel(modelObject, propFieldName), Arrays.asList(optionsArr)) { 

     @Override 
    public boolean wantOnSelectionChangedNotifications() { 
    return (handler != null); /* When the handler is not null, enable on change */ 
    } 
    @Override 
    public void onSelectionChanged(Object newSel) { 
    if (handler != null) {  
    handler.onChange(newSel); 
    } else { 
    super.onSelectionChanged(newSel); 
    } 
    } 
    };  
    container.add(radioGroupYesNo); 
    return radioGroupYesNo; 
} 

위에 표시된 코드를 사용하면 페이지가 새로 고침되지만 양식을 제출하고 페이지 새로 고침을 수행하려고합니다.

어디에서 양식을 RadioChoice와 연결할 수 있는지 알 수 없습니까?

답변

2

양식 구성 요소에 대한 대부분의 양식 처리 자료가 포함 된 양식의 구성 요소 계층 구조를 검색하고 직접 부모가 아닌 경우에도이를 발견하므로 문제는 RadioChoice에 대한 양식 연결이 아닙니다.

그러나 RadioChoice는 자연스럽게 양식을 제출하지 않으며 실제 양식 제출을 수행하기 위해 클라이언트 측에서 수행해야 할 작업이 필요할 수 있습니다.

wantOnSelectionChangedNotifications를 사용하면 라디오 선택의 변경 사항을 서버에 알리는 Ajax 요청에 대해 javascript를 사용할 수 있습니다. 이 Ajax에는 양식 제출이 포함되어 있지 않습니다.

RadioChoice에 AjaxFormSubmitBehavior의 하위 클래스를 첨부하고 실제 양식 제출을 수행 할 수는 있지만 시도하지 않았고 전혀 작동하지 않을지 모른다.

AjaxFormComponentUpdatingBehavior를 첨부 한 다음 this example code (영향을받는 DropDownChoice의 경우 RadioChoice에서 작동 할 수 있음)에서 영향을받은 페이지 부분 만 새로 고침을 시도 할 수 있습니다. 문제가 다른 입력 요소 (제출 부족으로 인해 서버 측에 알려지지 않음)에 대한 변경 사항을 잃어 버리는 경우 루트 문제를 해결할 수 있습니다.

+0

예제 코드 링크가 작동하지 않습니다 (404). – jarnoan

+0

예제 링크를 수정했습니다. –