2017-02-01 3 views
0

나는 체크 박스와 텍스트 영역으로 개찰판 양식을 가지고있다. 체크 상자 값이 변경되면 텍스트 영역을 숨기고 표시해야합니다. 나는 텍스트 영역에 대한 몇 가지 정보를 입력 한 다음 내 입력 된 정보가 손실 두 번 (숨기기 및 표시 텍스트 영역) 체크 박스를 클릭아파치 Wicket : 텍스트 영역 숨기기/표시 후 콘텐츠를 잃는다

private class EditCommentForm extends Form { 

    private TextArea applyToAllArea; 
    private boolean addToAll; 

    // some code here 

    public EditCommentForm(String id) { 
     super(id); 
     applyToAllArea = new TextArea<>("applyToAllArea", Model.of("")); 
     applyToAllArea.setVisible(addToAll); 
     applyToAllArea.setOutputMarkupId(true); 
     applyToAllArea.setOutputMarkupPlaceholderTag(true); 
     add(applyToAllArea); 

     CheckBox addToAllCheckbox = new AjaxCheckBox("addToAll", new PropertyModel<>(this, "addToAll")) { 
      @Override 
      protected void onUpdate(AjaxRequestTarget target) { 
       applyToAllArea.setVisible(addToAll); 
       target.addComponent(applyToAllArea); 
      } 
     }; 
     addToAllCheckbox.setVisible(documents.size() > 1); 
     add(addToAllCheckbox); 
     // some code here 
    } 

    private boolean isAddToAll() { 
     return addToAll; 
    } 

} 

:

이 내 구현입니다.

양식 제출없이 입력 된 정보를 어떻게 저장할 수 있습니까? @bert 문제를 설명하고있는 바와 같이

개찰구 버전 1.4.20

+1

''''applyToAllArea.setVisible (addToAll)' ''은 Ajax 호출 후에 텍스트 영역이 더 이상 dom의 일부가되지 않도록합니다. 따라서 모든 입력이 손실됩니다. 구성 요소에 값을 제출하고 저장해야합니다. 개찰구 1.4? 정말? – bert

+0

@bert 귀하의 의견에 감사드립니다 –

답변

3

는 텍스트 영역의 내용이 어쨌든 및 다시 그리기 개찰구가 비어있는 서버 측에서 현재 모델을 사용 후 저장되지 않는 것입니다.

쉬운 해결책은 텍스트 영역에 new AjaxFormComponentUpdatingBehavior("onblur")을 추가하여 사용자가 페이지의 다른 요소로 이동할 때 해당 내용을 저장하는 것입니다.

적어도 1.4.22로 업그레이드하는 것이 좋습니다. 1.4.20에 비해 보안 관련 수정 사항이 거의 없습니다.

+0

정말 고마워요! 너는 내 문제를 해결해. –

+0

답변을 업데이트 하시겠습니까? 동작은 다음과 같아야합니다. new AjaxFormComponentUpdatingBehavior ("onblur") –

+0

아, 맞아! 1.4.x를 사용합니다. 6.0.0부터 그냥 '흐림' –