2016-08-30 9 views
0

내 페이지에 여러 번 사용되는 레이블이 있습니다. 아약스 당 레이블을 업데이트하려고 할 때까지 제대로 작동합니다. 결과 : 첫 번째 레이블 만 업데이트됩니다. 알려진 문제입니까? JIRA 페이지를 열 수 없기 때문에 확실하지 않습니다. https://issues.apache.org/jira/browse/wicket (항상 떨리는 사이트를 방문하십시오). wicket 버전 7.3.0을 사용하고 있습니다.여러 번 사용 된 레이블 업데이트

 

    To reproduce this issue: 
    1. Add an label on your page (java part): 
    private final Label label; 
    .. 
    label = new Label("yourLabel", "Your Text"); 
    label.setOutputMarkupId(true); 
    add(label); 
    ... 
    1. Add your label multiple time (for e.g. 4 times) in your page (html part): 
    ... 
    <span wicket:id="yourLabel"/> 
    &ltspan wicket:id="yourLabel"/> 
    &ltspan wicket:id="yourLabel"/> 
    &ltspan wicket:id="yourLabel"/> 
    ... 
    2. Add event handler for e.g. the ajax event is UpdateEvent in your page (java part) 
    ... 
     @Override 
     public void onEvent(IEventevent) { 
      if (event.getPayload() instanceof UpdateEvent) { 
       //update your label 
       label.setDefaultModelObject("new Text"); 
       target.add(label); 

      } 
     } 

=> 첫 번째 라벨 만 업데이트됩니다. 동일한 텍스트 내용으로 레이블의 4 가지 인스턴스를 추가하여이 문제를 해결할 수 있습니다.

+0

1. 텍스트와 함께 "ad-hoc"레이블이 아닌 모델을 사용하십시오. 2. 동일한 개찰구를 여러 번 사용 : 이드는 이상합니다. 나는 놀랐습니다. 3. 대상에 추가하십시오 comoponets을 업데이트하려면 –

+0

Re : 그는 DebugSettings # componentUseCheck가 비활성화 된 배포 구성에서 실행됩니다. – svenmeier

답변

1

문제의 근본은 Wicket 구성 요소가 여러 번 사용되지 않아야한다는 것입니다. 구성 요소는 페이지의 개별 항목을 나타냅니다. 다른 레이블 개체 (해결 방법)가 올바로 추가되었습니다.

4 개의 레이블이 항상 같은 내용이지만 내용이 변경되는 경우 4 개의 레이블이 하나의 쓰기 가능한 문자열 모델을 공유하도록하여이를 명확하게 만들 수 있습니다. 다음은 몇 가지 의사 코드는 다음과 같습니다

IModel<String> labelModel = new Model<String>("Your Text"); 

label1 = new Label("label1", labelModel); 
label1.setOutputMarkupId(true); 
add(label1); 

label2 = new Label("label2", labelModel); 
label2.setOutputMarkupId(true); 
add(label2); 

... 

@Override 
public void onEvent(IEventevent) { 
    if (event.getPayload() instanceof UpdateEvent) { 
     //update your label 
     labelModel.setObject("new Text"); 
     target.add(label1); 
     target.add(label2); 
    } 
} 

또는,의 onEvent 메소드 자체를 구현하고 자신의 텍스트를 조정 라벨의 서브 클래스를함으로써 더욱 일을 캡슐화 할 수있다.

+0

그래, 그래도 여전히 라벨 인스턴스가 여러 개 필요하다는 의미입니다 (대안과 유사). 어쨌든 그것이 설계된대로 작동한다면, 나는 그것을 받아 들여야 만합니다. 정보를 제공해 주셔서 감사합니다. – user6608379

+0

질문에 대한 답변이 있으면 체크 표시 아이콘을 클릭하여 "수락"으로 표시 할 수 있습니다. http://stackoverflow.com/help/someone-answers – boris