在文件aPage.xhtml
中,我有以下几行:
<ui:include rendered="#{not empty param.target}" src="#{param.target}.html" />
<ui:include rendered="#{empty param.target}" src="About.html" />
通过以上几行,我预计当我转到http://localhost:8080/beta/aPage.xhtml
时,由于About.html
为param.target
,因此会包含null
页面。但是,GlassFish向我提出了以下例外:
java.io.FileNotFoundException: http://localhost:8080/beta/.html
不知何故,param.target
不被视为null
。
此外,我确实尝试使用==
和!=
运算符:
<ui:include rendered="#{param.target != null}" src="#{param.target}.html" />
<ui:include rendered="#{param.target == null}" src="About.html" />
有趣的是,这一次,在GlassFish的控制台上,我没有看到任何异常抛出。但是,在浏览器上,仍会显示错误页面,但java.io.FileNotFoundException
例外。
如果你能告诉我为什么会这样,以及我应该怎样做以避免它,我将非常感激。
更新
感谢Joop Eggen的提示,我终于通过以下几行解决了问题:
<ui:param name="noTarget" value="About.html" />
<ui:param name="hasTarget" value="#{param.target}.html" />
<ui:include src="#{empty param.target? noTarget : hasTarget}" />
祝你好运
答案 0 :(得分:4)
在两种情况下评估src,可能是文件存在测试?做
<ui:include src="#{empty param.target? 'About' : param.target}.html" />
答案 1 :(得分:3)
ui:include
没有rendered
属性...用<h:panelGroup
<h:panelGroup rendered="#{not empty param.target}">
<ui:include src="#{param.target}.html" />
</h:panelGroup>
<h:panelGroup rendered="#{empty param.target}" >
<ui:include src="About.html" />
</h:panelGroup>
修改强>
不幸的是,只有当src中的EL指向一个有效的路径
时,这才会起作用原因
期间
<ui:include>
的src中的EL在视图构建时评估,而不是在视图渲染时