0

同僚に JSTL タグを使用してはいけない理由を説明したかったのですが、すべてがレンダリングされる理由がわかりませんでした。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:c="http://java.sun.com/jstl/core">    
     <h:outputLabel>#{dummyBean.pageBuild}</h:outputLabel>
     <h:outputLabel>#{dummyBean.pageRerendered}</h:outputLabel>     
     <h:outputLabel>#{dummyBean.pageBuild and !dummyBean.pageRerendered}</h:outputLabel>
     <h:outputLabel>#{dummyBean.pageBuild and dummyBean.pageRerendered}</h:outputLabel>
        <c:if test="#{dummyBean.pageBuild and !dummyBean.pageRerendered}">
             <h:outputLabel value="Section 1"></h:outputLabel>
        </c:if>

        <c:if test="#{dummyBean.pageBuild and dummyBean.pageRerendered}">
            <h:outputLabel value="Section 2"></h:outputLabel>
        </c:if>

</ui:composition>

結果は

true
false
true
false 
Section 1 
Section 2 

私は彼らがそうなると思っていたでしょう

true
false
true
false 
Section 1 
4

1 に答える 1

4
<c:if test="true">
     <h:outputLabel value="Section 1.1"></h:outputLabel>
</c:if>

<c:if test="false">
    <h:outputLabel value="Section 2.2"></h:outputLabel>
</c:if>

およびはtest="true"、有効でnull以外の値であるという理由だけで、test="false"常にブール値として評価されます。trueString

あなたはおそらく代わりtest="#{true}"に使用するつもりでした。test="#{false}"

<c:if test="#{true}">
     <h:outputLabel value="Section 1.1" />
</c:if>

<c:if test="#{false}">
    <h:outputLabel value="Section 2.2" />
</c:if>

もう1つの問題は、JSTLタグのXML名前空間が間違っていることです。JSF2.xを使用しているときにFacelets1.xのいずれかを使用しています。そのはず

xmlns:c="http://java.sun.com/jsp/jstl/core"

JSFでJSTLを使用する場合は、次の回答を確認してください。JSF2FaceletsでのJSTL...意味がありますか?

于 2012-04-05T06:21:59.673 に答える