2011-12-09 3 views
4

나는 라벨에 간단하고 신비한 문제가 있으며 그것을 보여주기 위해 ajax를 사용합니다.Wicket 라벨 + Ajax 작동하지 않음

재미있는 것은이
public class ChecklistTemplateForm extends Form{ 
    private static final long serialVersionUID = 1L; 
    private Label cantSaveLabel; 
    public ChecklistTemplateForm(String id) { 
     super(id); 
     cantSaveLabel = new Label("cantSaveLabel", "Name is not unique, enter another name and try saving again."); 
     cantSaveLabel.setVisible(false); 
     cantSaveLabel.setOutputMarkupId(true); 
     add(cantSaveLabel); 
     add(new AjaxButton("saveButton") { 
      private static final long serialVersionUID = 1L; 
      @Override 
      protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
       target.addComponent(cantSaveLabel); 
       //here i do some stuff to decide if canSave is true or false 
       if (canSave){ 
        setResponsePage(AdminCheckListPage.class); 
       } 
       else if (!canSave){ 
        cantSaveLabel.setVisible(true); 
        System.out.println(canSave); 
       } 
      } 
     }); 
    } 

} 

의 System.out.print은 작동하지만 cansavelabel가 표시됩니다 결코 canSave은 거짓입니다. 내가 뭘 놓치고 있니?

답변

2

Ajax를 통해 레이블을 업데이트 할 수 없으므로 Ajax는 렌더링 된 페이지에 없습니다.

cantSaveLabel.setVisible(false); 

레이블이 HTML에 없도록합니다. Label을 다른 구성 요소 (WebMarkupContainer)로 묶고 여기에 setOutputMarkupId (true)를 호출하고이 컨테이너를 레이블의 AjaxRequestTarget instaed에 추가해야합니다.

+0

도움 주셔서 감사합니다. 나는이 행동에 대해 전혀 몰랐다. 나는 성공없이 webmarkupcontainer를 사용하여 시도했다. 이 코드가 작동하지 않는 다른 오류가있을 수 있습니다. 또한이 패널을 사용하여 객체를 편집하고 새 객체를 만들 때이 패널을 사용할 것이므로 모든 객체를 저장하는 고유 한 이름을 요구하는 것이 현명한 아이디어가 아님을 알게되었습니다. – fred

+0

@fred WebMarkupContainer에 코드를 게시 할 수 있습니까? 아니면 더 이상 행동이 필요 없으므로 해결 된 것입니까? – bert

+0

죄송합니다. 늦게 답변드립니다. 예, 불행히도 기능을 더 이상 필요로하지 않기 때문에 이것을 랩이라고합니다. 귀하의 의견을 보내 주시면 감사하겠습니다. 죄송합니다. 자세한 사례를 알려 드릴 수 없습니다. – fred

13

마크 업에 마크 업에 존재하지 않는 구성 요소를 업데이트 할 수 없으므로 위치 표시기에 라벨을 사용해야한다고 안내해야합니다.

cantSaveLabel.setOutputMarkupId(true); 
cantSaveLabel.setOutputMarkupPlaceholderTag(true); 
+0

솔루션을 제공해 주셔서 감사합니다. _OUTPUT_MARKUP_ID가 활성화 된 경우 Wicket이 자동으로 FLAG_PLACEHOLDER을 활성화하지 않는 이유가 궁금합니다. – ejboy

+0

저는 HTML 코드를 가능한 한 간단하고 단순하게 유지하는 것이 아이디어라고 생각합니다. 기본적으로이 기능을 활성화하면 HTML에 불필요한 태그가 많이 생길 수 있습니다. 일단 당신이 그것을 안다면 그것은 큰 문제가 아닐 것이다 ...;) – Till

+2

'setOutputMarkupPlaceholderTag()'는'setOutputMarkupId()'를 호출한다. 그래서 당신은 둘 모두를 호출 할 필요가 없다. – idontevenseethecode

관련 문제