Я разрабатываю пользовательский компонент JSF, используя информацию, которую нашел в следующей книге Pro JSF и HTML5 от Apress. .
На данный момент я успешно разработал:
- класс java для получения данных, которые будут отображаться в компоненте
- класс компонента Java
- класс рендерера java
- файл taglib
- пример страницы для отображения taglib
Все работает нормально, компонент успешно отрисовывается.
Теперь я хочу добавить события и поведение javascript к визуализируемым элементам, более конкретно, целью моего пользовательского компонента является отображение меню на веб-странице, и я хотел бы добавить эффекты раскрывающегося списка к входу в меню. Я знаю, как все это закодировать на JavaScript, чего я не знаю:
Как лучше всего добавлять события и поведение JavaScript к элементу, отображаемому в пользовательском компоненте?
Где должны быть размещены файлы JS? Как привязать события к элементам? Это делается в классе рендеринга или после, на веб-страницах?
Спасибо, я готов предоставить более конкретную информацию о моем коде, если это необходимо.
Класс компонента Java
Примечание. Класс CosmoMenu — это просто bean-компонент. По сути, он хранит дерево меню (ярлык, идентификатор и набор дочерних элементов, если они есть).
package components;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import domain.CosmoMenu;
import javax.faces.component.FacesComponent;
import javax.faces.component.UIComponentBase;
@FacesComponent(CosmoMenuComponent.COMPONENT_TYPE)
public class CosmoMenuComponent extends UIComponentBase{
/** Component family of {@link CosmoMenuComponent}. */
public static final String COMPONENT_FAMILY = "CosmoMenu";
/** Component type of {@link CosmoMenuComponent}. */
public static final String COMPONENT_TYPE = "CosmoMenu";
@Override
public String getFamily(){
return CosmoMenuComponent.COMPONENT_FAMILY;
}
private CosmoMenu theMenu;
public CosmoMenu getMenu(){
Gson gson = new Gson();
JsonParser jsonParser = new JsonParser();
CosmoMenuAPI myApi = new CosmoMenuAPI();
String strMenu = myApi.getMenu();
JsonElement jEl = jsonParser.parse(strMenu);
theMenu = gson.fromJson(jEl, CosmoMenu.class);
return theMenu;
}
}