ZK框架下如何重定向至Cmis对应的收藏夹文件夹
ZK框架仪表盘收藏夹跳转实现方案
你之前填写的/favouriteQuery是CMIS的资源存储路径,不是WEB应用可直接访问的前端路由,因此直接配置到href属性无法正常跳转,可采用以下三种方案实现:
方案1:ZK服务端事件绑定(无刷新切换,推荐)
不用原生href跳转,改用ZK组件的服务端事件绑定,点击后直接在仪表盘内加载并渲染收藏内容,不需要独立URL:
- 修改前端ZK模板代码:
<div id="dashboardWidgetContent" class="favourites-container"> <h:div class="favourites-link"> <a onClick="@command('loadFavorites')" class="textlink">${c:l('drive.dashboard.favourites.link')}</a> </h:div> </div>
- 对应ViewModel层添加事件处理方法:
@Command @NotifyChange("favoritesList") public void loadFavorites() { // 调用CMIS接口拉取/favouriteQuery路径下的当前用户收藏内容 this.favoritesList = cmisService.getChildrenByPath("/favouriteQuery"); // 可自行添加切换仪表盘展示区域的逻辑,隐藏其他组件只展示收藏列表 }
方案2:配置路由映射(支持直接访问收藏地址)
如果需要支持用户直接在地址栏输入/favouriteQuery访问收藏页,可在应用路由层配置转发规则,将该路径映射到仪表盘页面并携带展示收藏夹的参数:
- 在
web.xml或者项目路由配置中添加规则:将/favouriteQuery请求转发到仪表盘页面,同时带上showFavorites=true参数 - 仪表盘页面初始化时读取参数,自动加载收藏内容:
@Init public void init(@QueryParam("showFavorites") Boolean showFavorites) { if (Boolean.TRUE.equals(showFavorites)) { this.favoritesList = cmisService.getChildrenByPath("/favouriteQuery"); } }
- 原链接的
href可直接保留/favouriteQuery,点击后会自动跳转到仪表盘并加载收藏内容。
方案3:纯前端事件拦截(适合前后端分离混合开发场景)
如果项目前端引入了JS框架,可直接拦截链接的点击事件,通过ZK客户端API触发内容加载,还可以修改浏览器地址栏状态实现伪路由:
document.querySelector('.favourites-link .textlink').addEventListener('click', (e) => { e.preventDefault(); // 调用ZK客户端方法通知服务端加载收藏内容 zk.Widget.$('$dashboardWidgetContent').fire('onLoadFavorites', {}); // 可选:修改地址栏,支持刷新后保留状态 history.pushState({view: 'favorites'}, '我的收藏', '/favouriteQuery'); })
内容的提问来源于stack exchange,提问作者GetsugaTensho
相关产品推荐
相关产品推荐

