2013-02-19 4 views
1

Я конвертирую старый проект в более современную версию библиотек. Старая версия используется следующий Ajax4jsf код:Миграция в RichFaces 4: HtmlAjaxCommandLink -> UICommandButton

HtmlAjaxCommandLink link = new HtmlAjaxCommandLink() 
link.addAjaxListener(new AjaxListener() { 
    @Override 
    public void processAjax(AjaxEvent event) { } 
}); 

Согласно документации, HtmlAjaxCommandLink был заменен UICommandLink в RichFaces 4.

Хотя, я не могу точно замену для addAjaxListener для контроля.

Что можно заменить?

ответ

4

С JSF2 ajax был стандартизован JSF API. Все компоненты, поддерживающие поведение клиента, должны реализовать ClientBehaviorHolder, который, в свою очередь, предлагает метод addClientBehavior() для добавления поведения клиента. Конкретная реализация поведения клиента для ajax - это AjaxBehavior, которая, в свою очередь, предлагает метод addAjaxBehaviorListener(), который именно вы ищете.

Все со всеми, в вашем конкретном случае, его можно заменить следующим образом:

UICommandLink link = new UICommandLink(); // Note: you can also just use standard JSF HtmlCommandLink. 
link.setId("linkId"); // Fixed ID is mandatory for successful processing. 
link.setValue("click here"); // Not sure if you need it. Just to be complete. 
AjaxBehavior ajaxAction = new AjaxBehavior(); 
ajaxAction.addAjaxBehaviorListener(new AjaxBehaviorListener() { 
    @Override 
    public void processAjaxBehavior(AjaxBehaviorEvent event) throws AbortProcessingException { 
     System.out.println("Ajax behavior listener invoked."); // Do your actual job jere. 
    } 
}); 
link.addClientBehavior("action", ajaxAction); // Note: don't use "click" event! 
+0

Я с трудом находя импорт для AjaxBehavior, AjaxBehaviorEvent, AbortProcessingException. Есть ли вероятность, вы можете скопировать эти вложения из кода? Благодаря! – UrK

+0

Нажмите на ссылки. Все они указывают на javadoc. Или просто нажмите Ctrl + Shift + O в Eclipse и, если нужно, выберете из пакета 'javax.faces'. – BalusC