我在JSF中使用此代码。:
<c:if test="#{sV.done.booleanValue()}">
<option value="#{sV.id}" selected="selected">#{sV.text}</option>
</c:if>
<c:if test="#{not sV.done.booleanValue()}">
<option value="#{sV.id}">#{sV.text}</option>
</c:if>
sv
是我的包含数据的类(pojo),已完成Boolean
变量,如果option
我希望显示带有selected
属性的sV.done
标记是true
。
但我做不到。不知道我错在哪里。
否则c
可能会出现问题,因为c:forEach
在我的情况下在同一页面中的某段时间之前无法正常工作?这可能是原因吗?哪里错了?
每次显示没有选择attribute
的选项标记。
答案 0 :(得分:7)
试试这个: -
<c:if test="${sV.done == true}">...</c:if> // or
<c:if test="${sV.done eq true}">...</c:if> // or
<c:if test="${sV.done}">...</c:if> // or
对于否定(如果sV.done为false): -
<c:if test="${! sV.done}">...</c:if> /// OR
<c:if test="${not sV.done}">...</c:if> /// OR
<c:if test = "${sV.done != true}">...</c:if> // OR
<c:if test = "${sV.done ne true}">...</c:if> // OR
有关如果有运营商的更多信息,请查看以下链接: - JSTL if
答案 1 :(得分:5)
如果您使用的是EL 2.2,那么您的语法很好。那么,是否没有解释JSTL <c:xxx>
标签?您需要导入JSTL核心taglib。目前还不清楚您正在使用哪种视图技术和JSTL版本,因此这里是JSP和Facelets的导入示例。
使用JSTL 1.0的JSP:
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
使用JSTL 1.1 / 1.2的JSP:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Facelets 1.x with JSTL 1.1 / 1.2:
<html ... xmlns:c="http://java.sun.com/jstl/core">
Facelets 2.x with JSTL 1.2:
<html ... xmlns:c="http://java.sun.com/jsp/jstl/core">
无关,您是否考虑过使用JSF UISelectOne
组件而不是自己摆弄<option>
元素?您可以在our h:selectOneMenu
wiki page中找到一些具体示例。
答案 2 :(得分:3)
JSF和JSTL都直接访问'盒装'对象(布尔值,整数等)。不需要拆箱 - 因此您不必调用booleanValue()。
<c:if test="${sV.done}">...</c:if>
但实际上,您的整个方法可能会更好 - 我没有在页面中呈现选项,没有选项列表&amp;一个值。我不写出循环&amp;每次手动选择测试,有标签或者你可以写一个方法来做到这一点。
超级提示:我有一个名为Pair(String name,Object value)&amp;库方法HtmlUI.renderSelectOptions(),从这些&amp;列表中输出SELECT选项。 “当前”值。
选择组合框可能不是布尔值的最佳表示吗?您可以使用复选框..但这取决于您的UI设计。
如果您确实想要这样做,可以在标签内只切换 SELECTED属性。比复制整个密钥和密钥的代码更容易对于遗留代码,我有一个满足这个确切要求的函数:)
希望这有帮助!投票给我。
答案 3 :(得分:-2)
正如我所提到的那样,似乎某些其他组件/库正在干扰c的工作:如果,它在任何情况下都不起作用。我尝试了上面给出的所有建议。感谢大家的回复。