JSTL標(biāo)記是在視圖構(gòu)建過(guò)程中評(píng)估的,而不是在視圖呈現(xiàn)過(guò)程中評(píng)估的。您可以將其可視化如下:每當(dāng)?shù)谝淮蝿?chuàng)建視圖樹(shù)時(shí),將執(zhí)行所有JSTL標(biāo)記,其結(jié)果是只包含JSF組件的視圖。每當(dāng)呈現(xiàn)視圖樹(shù)時(shí),都會(huì)執(zhí)行所有JSF組件,結(jié)果是HTML。因此:JSF+JSTL并不像您期望的那樣同步運(yùn)行。JSTL首先從上到下運(yùn)行,然后將結(jié)果交給JSF,然后再?gòu)纳系较逻\(yùn)行JSF。這可能會(huì)導(dǎo)致像UIData這樣的JSF迭代組件的意外結(jié)果,因?yàn)樾袛?shù)據(jù)(在您的特殊情況下)#{item}
對(duì)象)是不在JSTL運(yùn)行時(shí)可用。
簡(jiǎn)而言之:使用JSTL控制JSF組件樹(shù)構(gòu)建的流程。使用JSF控制HTML輸出生成的流程。
您想使用rendered
屬性在這里。
<h:outputText value="Missing value" rendered="#{item.state ne 'Finish'}" /><h:outputLink value="myLink" rendered="#{item.state eq 'Finish'}">
<h:outputText value="Value = #{item.state}" /></h:outputLink>
另見(jiàn):