eXist-db中controller.xql的URL映射异常 请求无法转发到HTML模板
问题原因及修复方案
静态资源优先级覆盖转发规则
eXist-db 默认的URL重写逻辑会优先返回数据库中真实存在的静态资源,你请求的 /db/apps/myapp/data/let001.xml 是实际存储的文件,所以还没走到你写的转发规则,资源就被直接返回了。如果要让这类请求也触发转发,要么把XML资源放到非公开路径,要么在controller开头关闭静态资源优先匹配的逻辑。
链接指向错误
你在 file.xql 中生成的a标签href直接绑定了XML资源的真实存储URI,点击后自然跳转到了资源地址,根本不会触发你配置的模板转发规则。你可以调整链接生成逻辑,指向自定义的路由路径,专门用来触发模板渲染。
参数拼接错误
controller里的传参逻辑有问题:value="{$exist:resource}.xml" 会重复拼接后缀,比如请求的资源是let001.xml,传过去的参数就变成了let001.xml.xml,完全找不到对应文件,直接去掉后面的.xml即可。
dispatch块结构错误
你在dispatch根节点下同时放了根级forward和view块,两个逻辑冲突会导致转发失效。正确的dispatch结构如下:
else if (contains($exist:path, "/data/")) then <dispatch xmlns="http://exist.sourceforge.net/NS/exist"> <view> <forward url="{$exist:controller}/templates/file.html"/> <forward url="{$exist:controller}/modules/view.xql"> <add-parameter name="filename" value="{$exist:resource}"/> </forward> </view> </dispatch>
内容的提问来源于stack exchange,提问作者regina
相关产品推荐
相关产品推荐

