2016-08-30 4 views
0

У меня есть метка, которая используется несколько раз на моей странице. Он отлично работает, пока я не попытаюсь обновить ярлык на ajax. Результат: обновляется только первая метка. Это известная проблема? Я не уверен, так как я не могу открыть страницу JIRA: https://issues.apache.org/jira/browse/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. Многократное использование одной и той же калитки: id странно, я удивлен, что он работает. 3. добавить к целевым эловым comoponets хотите обновить –

+0

Re 2: он работает в конфигурации развертывания, где DebugSettings # componentUseCheck отключен. – svenmeier

ответ

1

Корень проблемы состоит в том, что компоненты Wicket не должны использоваться несколько раз - компонент представляет собой отдельный элемент на странице. Добавление четырех различных Этикетка объектов (ваш обходной путь) является правильным.

Если четыре ярлыка всегда будут иметь одинаковый контент, но это содержимое иногда изменяется, вы можете сделать это ясно, если четыре ярлыка имеют одну записываемую строку. Вот некоторые псевдокод:

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