如何在c:if中使用布尔变量

时间:2012-10-06 09:31:36

标签: java jsf jstl

我在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的选项标记。

4 个答案:

答案 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的工作:如果,它在任何情况下都不起作用。我尝试了上面给出的所有建议。感谢大家的回复。