【发布时间】:2012-06-04 09:58:50
【问题描述】:
在文件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}" />
最好的问候
【问题讨论】:
-
param.target似乎持有-en值,这意味着它不是空的,这就是为什么你被引用到-en.html页面......似乎持有的值存在问题param.target -
@Daniel:哎呀,对不起,
-en不应该在那里。我在简化代码以在此处发布时错过了这一点。