最近,我不得不使用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构建动态响应的多级菜单相关推荐

  1. 响应式多级菜单 侧边菜单栏_使用纯HTML和OmniFaces构建动态响应的多级菜单

    响应式多级菜单 侧边菜单栏 最近,我不得不使用JSF 2.2创建一个响应式多级菜单. 要求:菜单应: 从后端使用动态结构创建 React灵敏,例如对桌面和移动设备友好 有带有导航链接的子菜单项 支持触 ...

  2. 响应式多级菜单 侧边菜单栏_大菜单,小屏幕:响应式,多级导航

    响应式多级菜单 侧边菜单栏 如果您曾经在响应式网站上工作,那么毫无疑问,您必须解决这个新兴领域中最棘手的问题之一:导航. 对于简单的导航,解决方案可以很简单. 但是,如果您要处理的事情比较复杂,可能有 ...

  3. html动态加载多级菜单,请问iview中动态加载3级菜单的json数据,非常感谢

    Navigation One Option 1 Option 2 Option 3 Option 4 Navigation Two Option 5 Option 6 Submenu Option 7 ...

  4. c# mvc5 view 多层_MVC5+EF6 入门完整教程13 -- 动态生成多级菜单

    稍微有一定复杂性的系统,多级菜单都是一个必备组件. 本篇专题讲述如何生成动态多级菜单的通用做法. 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单. 需要达成的效果:容易复用,可以根据mode ...

  5. EI:生物膜反应器抗性组对替加环素浓度升高的动态响应

    生物膜反应器抗性组对替加环素浓度升高的动态响应 逐步提升的替加环素压力下好氧生物膜微生物群落耐药性发展特征 Developmental dynamics of antibiotic resistome ...

  6. 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序

    面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 Ajax 为更好的 Web 应用程序铺平了道路 在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java™ ...

  7. 基于胜任力模型为集团企业构建动态信息安全培训课程体系

    基于胜任力模型为集团企业构建动态信息安全培训课程体系 集团型企业经常会遇到: n  "在和运营商的交流.讲标中,会议后发现竞争对手利用酒店人员将录音设备安装在会议现场,造成技术机密和商业机密 ...

  8. 同步磁阻电机SynRM滑模控制 基于FOC策略,其中转速环采用滑模控制器,较PI提高系统的动态响应能力

    同步磁阻电机SynRM滑模控制 1.基于FOC策略,其中转速环采用滑模控制器,较PI提高系统的动态响应能力. 2.提供算法对应的参考文献和仿真模型 仿真模型纯手工搭建 ID:2978679471750 ...

  9. 京东构建需求响应式亿级商品详情页技术分析

    转自涛哥的博客:http://jinnianshilongnian.iteye.com/blog/2235572 1.构建亿级前端读服务 从入职京东到现在,做读服务已经一年多的时间了,经历了各种亿级到 ...

最新文章

  1. 手绘风格的数据可视化 Sketchify,让你的图表也萌萌哒
  2. Spring Cloud各组件超时
  3. mysql加锁语法_MySql 加锁问题
  4. android 通知历史,Android P新特性:追踪应用通知历史
  5. LDA(线性判别分析)详解 —— matlab
  6. 设置GRUB密码及重置密码
  7. 企业应该了解的ISO27001体系建设指导
  8. 产品开发都应该知道的8个网站,增强工作体验
  9. 达梦数据库大小写这个参数敏感怎样设置
  10. 图解多线程设计模式pdf_图解Java多线程设计模式pdf
  11. python 机器视觉测量_用Opencv python实现精密测量
  12. 感谢我的数据结构老师王卓
  13. linux 高效压缩工具xz的压缩和解压使用
  14. 逻辑综合重点解析(Design Compiler篇)
  15. UIUC数学计算机专业,UIUC的Statistics「伊利诺伊大学香槟分校统计系」
  16. 常见渗透测试靶场学习笔记
  17. 基于STM32的汇编程序
  18. 10月英语--是做的不好!!
  19. 海康sdk捕获码流数据通过JavaCV推成rtmp流的实现思路(PS流转封装RTMP)
  20. CornerNet 论文阅读笔记

热门文章

  1. oracle基本笔记整理及案例分析2
  2. 自定义SpringBoot的运行动画---美女
  3. html5动画是什么,10个HTML5动画 让你忘掉Flash是啥(组图)
  4. mysql自动插入的时间不对 差8小时
  5. follow 开源项目关于NoClassDefFoundError错误的解决方法
  6. 如何导入数据模板到MVC
  7. gc 堆外_GC解释:堆
  8. input发送a.jax_JAX-RS 2.0:服务器端处理管道
  9. websocket wss_使用wss和HTTPS / TLS保护WebSocket的安全
  10. java 挥发注解_Java的挥发性修饰符