You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AppWithinMinutes的Sheet页面缓存异常问题及解决方案咨询

禁用AppWithinMinutes Sheet层缓存的解决方法

问题根因

AppWithinMinutes(以下简称AWM)默认对Sheet展示页启用渲染缓存,缓存key仅绑定Sheet页面本身,未绑定当前Sheet承载展示的具体业务文档,导致不同业务文档复用同一份渲染结果,直接引发内容跨页面串扰、硬刷新时内容时隐时现的异常。

实操解决步骤

1. 强制禁用当前Sheet页的渲染缓存

编辑你修改过的AWM Sheet页面,在原有Velocity代码的最顶部加入以下缓存控制逻辑,直接从请求层面和渲染层面关闭缓存:

## 关闭Velocity渲染缓存,设置缓存时长为0
#set ($xcontext.context.setCacheDuration(0))
## 给HTTP响应加不缓存头,避免浏览器端缓存异常
$response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate")
$response.setHeader("Pragma", "no-cache")
$response.setHeader("Expires", "0")

2. 修复上下文变量串值问题

原有代码直接调用顶层$doc变量取标题,在AWM Sheet的上下文复用场景下,很容易取到缓存中残留的上一个文档对象。需要显式从当前请求上下文获取目标文档,把原有代码中的标题赋值逻辑替换为:

## 显式获取当前请求对应的业务文档,避免上下文串值
#set ($currentDoc = $xcontext.context.get("doc"))
#set ($title = $currentDoc.title)

3. 补全代码边界判断,避免异常缓存

原有字符串截断逻辑未做长度校验,当文档标题长度小于7位时会直接抛出Velocity执行异常,异常信息会被缓存进一步加剧串页问题。修正后的完整代码块如下:

<div>
    #set ($xcontext.context.setCacheDuration(0))
    $response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate")
    $response.setHeader("Pragma", "no-cache")
    $response.setHeader("Expires", "0")

    #set ($currentDoc = $xcontext.context.get("doc"))
    #set ($title = $currentDoc.title)

    #if ($title.length() >= 7)
        #set ($newTitle = $title.substring(0,6) + "X" + $title.substring(7, $title.length()))
        <h2>Applications with a tag: $newTitle</h2>
        {{PagesByTag tagName=$newTitle/}}
    #end
</div>

4. 永久关闭Sheet页面对象级缓存(管理员操作)

如果上述代码级修改后仍有缓存残留,可通过页面对象配置永久关闭缓存:

  • 使用管理员账号进入AWM Sheet页的编辑模式,切换到「对象」标签
  • 查找页面上是否存在XWiki.CacheClass对象,不存在则手动添加该对象
  • 将对象中的cacheDuration属性值设置为0
  • 保存页面即可,该配置会让XWiki渲染引擎永远不对该Sheet页做持久化渲染缓存。

内容的提问来源于stack exchange,提问作者Andy Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:27:41