Jsf 2 使用JSTL的条件图像渲染<;c:选择>;
我正在开发一个JSF应用程序,我有一个关于使用JSTL的Facelets页面的问题。我想在ui中显示:重复一些问题、一个问题和三个答案(有条件地格式化),如果问题是对的或错的,在答案前面打勾(ticksall.png)或打X(xSmall.png) 答案的格式正确,但勾号/X的位置不正确(我检查了布尔值是否正确,有些是真的,有些是假的)。每次它都放一个X,即使应该有一个勾号 我已经包括了Jsf 2 使用JSTL的条件图像渲染<;c:选择>;,jsf-2,jstl,facelets,Jsf 2,Jstl,Facelets,我正在开发一个JSF应用程序,我有一个关于使用JSTL的Facelets页面的问题。我想在ui中显示:重复一些问题、一个问题和三个答案(有条件地格式化),如果问题是对的或错的,在答案前面打勾(ticksall.png)或打X(xSmall.png) 答案的格式正确,但勾号/X的位置不正确(我检查了布尔值是否正确,有些是真的,有些是假的)。每次它都放一个X,即使应该有一个勾号 我已经包括了xmlns:c=”http://java.sun.com/jsp/jstl/core 守则: <
xmlns:c=”http://java.sun.com/jsp/jstl/core
守则:
<ui:repeat var="n"
value="#{answerResultBean.accessWrongAnswerColumnWrapperList}">
<hr />
<h:outputText value="#{n.noQuestion}. #{n.question}" />
<h:panelGrid columns="2" style="text-align: left;">
<c:choose>
<c:when test="#{n.rightGridAnswerA}">
<h:form>
<img src="/juritest/resources/img/tickSmall.png" alt="tick" />
</h:form>
</c:when>
<c:otherwise>
<h:form>
<img src="/juritest/resources/img/xSmall.png" alt="wrong" />
</h:form>
</c:otherwise>
</c:choose>
<h:outputText value="a) #{n.a}"
style="#{n.userAnswerA ? 'font-weight:bold;' : 'font-weight:normal;'}" />
<c:choose>
<c:when test="#{n.rightGridAnswerB}">
<h:form>
<img src="/juritest/resources/img/tickSmall.png" alt="tick" />
</h:form>
</c:when>
<c:otherwise>
<h:form>
<img src="/juritest/resources/img/xSmall.png" alt="wrong" />
</h:form>
</c:otherwise>
</c:choose>
<h:outputText value="b) #{n.b}"
style="#{n.userAnswerB ? 'font-weight:bold;' : 'font-weight:normal;'}" />
<c:choose>
<c:when test="#{n.rightGridAnswerC}">
<h:form>
<img src="/juritest/resources/img/tickSmall.png" alt="tick" />
</h:form>
</c:when>
<c:otherwise>
<h:form>
<img src="/juritest/resources/img/xSmall.png" alt="wrong" />
</h:form>
</c:otherwise>
</c:choose>
<h:outputText value="c) #{n.c}"
style="#{n.userAnswerC ? 'font-weight:bold;' : 'font-weight:normal;'}" />
</h:panelGrid>
</ui:repeat>
JSTL标记和JSF组件不会像您从编码中期望的那样同步运行。JSTL标记首先在视图构建时运行,生成JSF组件树。JSF组件随后在视图呈现时运行,生成HTML输出。因此,当JSTL运行时,{n}
在EL范围内不可用,因为
此时尚未运行
您需要JSF组件的rendered
属性,或者以智能的方式使用三元操作符
以下是一些笨拙的地方
<c:choose>
<c:when test="#{n.rightGridAnswerA}">
<h:form>
<img src="/juritest/resources/img/tickSmall.png" alt="tick" />
</h:form>
</c:when>
<c:otherwise>
<h:form>
<img src="/juritest/resources/img/xSmall.png" alt="wrong" />
</h:form>
</c:otherwise>
</c:choose>
...
<c:choose>
<c:when test="#{n.rightGridAnswerB}">
<h:form>
<img src="/juritest/resources/img/tickSmall.png" alt="tick" />
</h:form>
</c:when>
<c:otherwise>
<h:form>
<img src="/juritest/resources/img/xSmall.png" alt="wrong" />
</h:form>
</c:otherwise>
</c:choose>
...
<c:choose>
<c:when test="#{n.rightGridAnswerC}">
<h:form>
<img src="/juritest/resources/img/tickSmall.png" alt="tick" />
</h:form>
</c:when>
<c:otherwise>
<h:form>
<img src="/juritest/resources/img/xSmall.png" alt="wrong" />
</h:form>
</c:otherwise>
</c:choose>
或使用条件运算符执行以下操作:
<h:form>
<h:graphicImage name="img/#{n.rightGridAnswerA ? 'tick' : 'x'}Small.png" alt="#{n.rightGridAnswerA ? 'tick' : 'wrong'}" />
</h:form>
...
<h:form>
<h:graphicImage name="img/#{n.rightGridAnswerB ? 'tick' : 'x'}Small.png" alt="#{n.rightGridAnswerB ? 'tick' : 'wrong'}" />
</h:form>
...
<h:form>
<h:graphicImage name="img/#{n.rightGridAnswerC ? 'tick' : 'x'}Small.png" alt="#{n.rightGridAnswerC ? 'tick' : 'wrong'}" />
</h:form>
...
...
(这仍然不是,但这是一个不同的问题)
另见:
<h:form>
<h:graphicImage name="img/#{n.rightGridAnswerA ? 'tick' : 'x'}Small.png" alt="#{n.rightGridAnswerA ? 'tick' : 'wrong'}" />
</h:form>
...
<h:form>
<h:graphicImage name="img/#{n.rightGridAnswerB ? 'tick' : 'x'}Small.png" alt="#{n.rightGridAnswerB ? 'tick' : 'wrong'}" />
</h:form>
...
<h:form>
<h:graphicImage name="img/#{n.rightGridAnswerC ? 'tick' : 'x'}Small.png" alt="#{n.rightGridAnswerC ? 'tick' : 'wrong'}" />
</h:form>