使用纯HTML和OmniFaces构建动态响应的多级菜单
最近,我不得不使用JSF 2.2创建一个响应式多级菜单。 要求:菜单应:
- 从后端使用动态结构创建
- 反应灵敏,例如对桌面和移动设备友好
- 有带有导航链接的子菜单项
- 支持触摸事件
- 支持键盘辅助功能
PrimeFaces的菜单不是一个选择。 实际上,可以通过模型以编程方式创建它们,但是:
- 他们没有真正回应
- 子菜单项只能折叠/展开子菜单,不能包含导航链接
- …
好吧,为什么不为响应式多级菜单选择任何基于jQuery的插件呢? 有很多插件。 请参阅响应式导航和菜单模式的有用列表 。 我选择了FlexNav 。
但是如何输出动态菜单结构呢? ui:repeat在这里不是一个选择,因为该结构(嵌套子菜单等)不是先验的。 幸运的是,OmniFaces具有o:tree ,通过声明标记中的JSF组件或HTML元素,可以完全控制树层次结构的标记。 o:tree本身不会呈现任何HTML标记。 正是我需要的!
我最后得到了这个XHTML片段,其中混合了o:treeNode,o:treeNodeItem,o:treeInsertChildren和由提到的FlexNav菜单定义HTML元素:
<h:outputScript library="js" name="jquery.flexnav.js"/>
<h:outputStylesheet library="css" name="flexnav.css"/><ul id="mainnavi" class="flexnav" data-breakpoint="640" role="navigation"><o:tree value="#{mainNavigationBean.treeModel}" var="item"><o:treeNode level="0"><o:treeNodeItem><li class="item"><a href="#{item.href}" title="#{item.title}">#{item.text}</a><o:treeInsertChildren/></li></o:treeNodeItem></o:treeNode><o:treeNode><ul><o:treeNodeItem><li><a href="#{item.href}" title="#{item.title}">#{item.text}</a><o:treeInsertChildren/></li></o:treeNodeItem></ul></o:treeNode></o:tree>
</ul><h:outputScript id="mainnaviScript" target="body">$(document).ready(function () {$("#mainnavi").flexNav({'calcItemWidths': true});});
</h:outputScript>
带菜单项的OmniFaces的TreeModel是通过编程创建的。 Java代码如下所示:
public TreeModel<NavigationItemDTO> getTreeModel() {// get menu model from a remote serviceNavigationContainerDTO rootContainer = remoteService.fetchMainNavigation(...);TreeModel<NavigationItemDTO> treeModel = new ListTreeModel<>();buildTreeModel(treeModel, rootContainer.getNavItem());return treeModel;
}private void buildTreeModel(TreeModel<NavigationItemDTO> treeModel, List<NavigationItemDTO> items) {for (NavigationItemDTO item : items) {buildTreeModel(treeModel.addChild(item), item.getNavItem());}
}
最终结果(桌面版本):
请注意,子菜单是可单击的,并且可以在鼠标悬停时展开。
您会发现,JSF是灵活的,有时您不需要成熟的组件。 玩得开心!
翻译自: https://www.javacodegeeks.com/2014/12/building-dynamic-responsive-multi-level-menus-with-plain-html-and-omnifaces.html
使用纯HTML和OmniFaces构建动态响应的多级菜单相关推荐
- 响应式多级菜单 侧边菜单栏_使用纯HTML和OmniFaces构建动态响应的多级菜单
响应式多级菜单 侧边菜单栏 最近,我不得不使用JSF 2.2创建一个响应式多级菜单. 要求:菜单应: 从后端使用动态结构创建 React灵敏,例如对桌面和移动设备友好 有带有导航链接的子菜单项 支持触 ...
- 响应式多级菜单 侧边菜单栏_大菜单,小屏幕:响应式,多级导航
响应式多级菜单 侧边菜单栏 如果您曾经在响应式网站上工作,那么毫无疑问,您必须解决这个新兴领域中最棘手的问题之一:导航. 对于简单的导航,解决方案可以很简单. 但是,如果您要处理的事情比较复杂,可能有 ...
- html动态加载多级菜单,请问iview中动态加载3级菜单的json数据,非常感谢
Navigation One Option 1 Option 2 Option 3 Option 4 Navigation Two Option 5 Option 6 Submenu Option 7 ...
- c# mvc5 view 多层_MVC5+EF6 入门完整教程13 -- 动态生成多级菜单
稍微有一定复杂性的系统,多级菜单都是一个必备组件. 本篇专题讲述如何生成动态多级菜单的通用做法. 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单. 需要达成的效果:容易复用,可以根据mode ...
- EI:生物膜反应器抗性组对替加环素浓度升高的动态响应
生物膜反应器抗性组对替加环素浓度升高的动态响应 逐步提升的替加环素压力下好氧生物膜微生物群落耐药性发展特征 Developmental dynamics of antibiotic resistome ...
- 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 Ajax 为更好的 Web 应用程序铺平了道路 在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java™ ...
- 基于胜任力模型为集团企业构建动态信息安全培训课程体系
基于胜任力模型为集团企业构建动态信息安全培训课程体系 集团型企业经常会遇到: n "在和运营商的交流.讲标中,会议后发现竞争对手利用酒店人员将录音设备安装在会议现场,造成技术机密和商业机密 ...
- 同步磁阻电机SynRM滑模控制 基于FOC策略,其中转速环采用滑模控制器,较PI提高系统的动态响应能力
同步磁阻电机SynRM滑模控制 1.基于FOC策略,其中转速环采用滑模控制器,较PI提高系统的动态响应能力. 2.提供算法对应的参考文献和仿真模型 仿真模型纯手工搭建 ID:2978679471750 ...
- 京东构建需求响应式亿级商品详情页技术分析
转自涛哥的博客:http://jinnianshilongnian.iteye.com/blog/2235572 1.构建亿级前端读服务 从入职京东到现在,做读服务已经一年多的时间了,经历了各种亿级到 ...
最新文章
- 手绘风格的数据可视化 Sketchify,让你的图表也萌萌哒
- Spring Cloud各组件超时
- mysql加锁语法_MySql 加锁问题
- android 通知历史,Android P新特性:追踪应用通知历史
- LDA(线性判别分析)详解 —— matlab
- 设置GRUB密码及重置密码
- 企业应该了解的ISO27001体系建设指导
- 产品开发都应该知道的8个网站,增强工作体验
- 达梦数据库大小写这个参数敏感怎样设置
- 图解多线程设计模式pdf_图解Java多线程设计模式pdf
- python 机器视觉测量_用Opencv python实现精密测量
- 感谢我的数据结构老师王卓
- linux 高效压缩工具xz的压缩和解压使用
- 逻辑综合重点解析(Design Compiler篇)
- UIUC数学计算机专业,UIUC的Statistics「伊利诺伊大学香槟分校统计系」
- 常见渗透测试靶场学习笔记
- 基于STM32的汇编程序
- 10月英语--是做的不好!!
- 海康sdk捕获码流数据通过JavaCV推成rtmp流的实现思路(PS流转封装RTMP)
- CornerNet 论文阅读笔记
热门文章
- oracle基本笔记整理及案例分析2
- 自定义SpringBoot的运行动画---美女
- html5动画是什么,10个HTML5动画 让你忘掉Flash是啥(组图)
- mysql自动插入的时间不对 差8小时
- follow 开源项目关于NoClassDefFoundError错误的解决方法
- 如何导入数据模板到MVC
- gc 堆外_GC解释:堆
- input发送a.jax_JAX-RS 2.0:服务器端处理管道
- websocket wss_使用wss和HTTPS / TLS保护WebSocket的安全
- java 挥发注解_Java的挥发性修饰符