JSF 2.0:空运算符不能与param一起使用

时间:2012-05-30 07:18:24

标签: java jsf-2 el param

在文件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.htmlparam.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}" />

祝你好运

2 个答案:

答案 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在视图构建时评估,而不是在视图渲染时

期间