PrimeFaces Extensions pe:documentViewer渲染PDF问题咨询
这种硬编码文件名能正常显示,但用EL表达式#{utentesBean.nomeFile}就加载失败的情况,大概率是变量值、路径解析或者Bean作用域的问题,给你几个具体的排查方向:
先验证EL变量的实际值:在页面上添加一个
<h:outputText value="#{utentesBean.nomeFile}" />,直接输出这个变量的内容,看看是不是和硬编码的441.pdf完全一致。如果输出为空、不对或者拼写错误(比如少了.pdf后缀),那问题就出在Bean的属性赋值上——检查utentesBean里的nomeFile属性是否正确初始化、有没有在合适的时机赋值,还要注意EL表达式是大小写敏感的,属性名拼写必须完全匹配。检查路径拼接的完整性:硬编码的路径是
/resources/pdf/441.pdf,而EL版本是/resources/pdf/#{utentesBean.nomeFile},要确保nomeFile的值是完整的文件名(包含后缀)。如果你的Bean里只存了441而没有.pdf,那最终生成的路径会是/resources/pdf/441,自然找不到对应的PDF文件。确认Bean的作用域是否合理:如果
utentesBean是request或view作用域,要保证在页面渲染时,这个Bean已经被初始化,且nomeFile属性已经被正确设置。比如如果是通过按钮点击事件才设置的nomeFile,要确保页面在点击后重新渲染,或者Bean的作用域能保留这个值(比如用viewScoped而不是requestScoped)。排查PF Extensions版本的兼容性问题:某些旧版本的PrimeFaces Extensions可能在处理
documentViewer的name属性时,对EL表达式的解析存在bug。可以尝试升级到最新的稳定版PF Extensions,看看是否能解决这个问题。查看错误日志定位问题:打开服务器的日志文件,或者用浏览器的开发者工具查看网络请求——看看
documentViewer请求PDF的实际URL是什么。如果是404错误,对比这个URL和硬编码的正确URL,就能快速发现路径拼接的问题;如果是服务器内部错误,日志里会给出更具体的异常信息。
内容的提问来源于stack exchange,提问作者user2928849

