2015-05-14 4 views
0

После миграции калитки на 1,5 я столкнулся с этой проблемой. В Wicket 1.5 Я (программист прежде меня) добавлял JS и CSS ссылки в конструктор, а затем компонент, simmilar к этому:Как добавить компонент ПОСЛЕ рендеринга страницы

public abstract class PageTemplate extends WebPage implements IHeaderContributor { 
     public BarePageTemplate() { 
      this(null); 
     } 

     public BarePageTemplate(PageParameters params) { 
      super(params); 
      add(JavascriptPackageResource.getHeaderContribution(ResourceMarker.class, "js/jquery-1.4.2.min.js")); 
      add(JavascriptPackageResource.getHeaderContribution(ResourceMarker.class, "js/jquery-ui-1.8.4.custom.min.js")); 
      [...] 
      jGrowlMarker = new Label("jGrowlMarker"); // placeholder for jgrowl messages 
      jGrowlMarker.setOutputMarkupId(true); 
      jGrowlMarker.add(new JGrowlBehavior()); 
      add(jGrowlMarker); 
     } 
    } 

В калитке 1.5 это уже не возможно. По migration guide я переработан этот код в это:

 public abstract class PageTemplate extends WebPage implements IHeaderContributor { 
     public BarePageTemplate() { 
      this(null); 
     } 

    public BarePageTemplate(PageParameters params) { 
     super(params); 
     jGrowlMarker = new Label("jGrowlMarker"); // placeholder for jgrowl messages 
     jGrowlMarker.setOutputMarkupId(true); 
     jGrowlMarker.add(new JGrowlBehavior()); 
     add(jGrowlMarker); 
    } 

    @Override 
    public void renderHead(IHeaderResponse response) { 
     response.renderJavaScriptReference(new CommonResourceRef("js/jquery-1.4.2.min.js")); 
     response.renderJavaScriptReference(new CommonResourceRef("js/jquery-ui-1.8.4.custom.min.js")); 
[...] 
} 
} 

Этот фрагмент кода работает, что я имею в виду, что в том, что она включает в себя те js. Что вызывает у меня вопрос является то, что сейчас мой компонент (в данном случае jGrowlMarker) оказывает на странице перед страницей включает те ЯШ:

// jGrowl component 

<script type="text/javascript" src="./wicket/resource/pl.softq.commons.ui.resource.ResourceMarker/js/jquery-1.4.2.min-ver-65B352E1BA79F0E2A3B1E014BC2571AF.js"></script> 
<script type="text/javascript" src="./wicket/resource/pl.softq.commons.ui.resource.ResourceMarker/js/jquery-ui-1.8.4.custom.min-ver-88A9784D8E08D25998F239E2D65F03D7.js"></script> 

Из-за того, что она не работает должным образом (я считаю, Thats вопрос). Он пытается создать компонент jGrowl, но после этого компонента добавляется jGrowl.js. [...] символизирует остальную часть моих js и css refenreces (включая jGrowl). Я попытался добавить super.renderHead(response); до renderHead, но он также не работает (super.renderHead относится к пустой в Component.class).

Так что мой вопрос: как добавить компонент после renderHead инициализирует или как его добавить внутри renderHead. Я не специалист в калитки, поэтому, если вам нужно больше кода, дайте мне знать.

ответ

2

Вы можете переместить метод renderHead() в JGrowlBehavior. Таким образом, он будет вносить вклад сначала, а затем сам jgrowl.js. Если зависимости внесены кем-то еще на странице, Wicket обнаружит это и внесет их только один раз.

В Wicket 6.x есть дополнительные улучшения в этой области. Вы можете прочитать: http://wicketinaction.com/2012/07/wicket-6-resource-management/

 Смежные вопросы

  • Нет связанных вопросов^_^