我正在开发一个JSF自定义组件,使用以下书籍中找到的信息:Pro JSF and HTML5 by Apress。
到目前为止,我已经成功地开发了:
- 用于获取要在组件中呈现的数据的Java类 - Java组件类 - Java渲染器类 - taglib文件 - 用于呈现taglib的示例页面
一切运行良好,组件成功呈现。
现在,我想为呈现的元素添加JavaScript事件和行为,更具体地说,我的自定义组件的目的是在网页上呈现菜单,并且我想向菜单条目添加下拉效果。我知道如何用JavaScript编写整个内容,但我不知道: 将JavaScript事件和行为添加到自定义组件中呈现的元素的最佳实践是什么? JS文件应放在哪里?如何将事件绑定到元素?是在渲染类中完成,还是在网页上完成?
谢谢,如果需要,我愿意提供有关我的代码的更多详细信息。
Java组件类
注意:CosmoMenu类只是一个bean。它基本上存储了一个菜单树(标签、ID和一组子项(如果有))。
到目前为止,我已经成功地开发了:
- 用于获取要在组件中呈现的数据的Java类 - Java组件类 - Java渲染器类 - taglib文件 - 用于呈现taglib的示例页面
一切运行良好,组件成功呈现。
现在,我想为呈现的元素添加JavaScript事件和行为,更具体地说,我的自定义组件的目的是在网页上呈现菜单,并且我想向菜单条目添加下拉效果。我知道如何用JavaScript编写整个内容,但我不知道: 将JavaScript事件和行为添加到自定义组件中呈现的元素的最佳实践是什么? JS文件应放在哪里?如何将事件绑定到元素?是在渲染类中完成,还是在网页上完成?
谢谢,如果需要,我愿意提供有关我的代码的更多详细信息。
Java组件类
注意:CosmoMenu类只是一个bean。它基本上存储了一个菜单树(标签、ID和一组子项(如果有))。
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;
}
}