【问题标题】:JSF logical operator in nested ui:repeat嵌套 ui:repeat 中的 JSF 逻辑运算符
【发布时间】:2016-07-07 20:12:54
【问题描述】:

我有一组数组列表形式的数据,我想根据菜单类别显示每种食物,但我无法使用 ELParser 中的逻辑运算符 eq 检查,请帮我解决这个问题

<ui:repeat var="menu" value="#{eventBean.menuList}">
                <li><ol><h5>#{menu}</h5></ol></li>
                <ui:repeat var="food" value="#{eventBean.projectDetail.foodList}">
                    <li>
                    <ui:fragment ></ui:fragment>
                        <ol><h:outputText rendered="#{food.menu eq menu}">#{food.name}</h:outputText></ol>
                    </li>
                </ui:repeat>
            </ui:repeat>

菜单可以显示,但内部循环不显示任何食物。我曾尝试过#{food.menu eq #{menu}},但在 ELParser 上会出现异常

编辑 1:

我刚刚意识到&lt;h:outputText&gt;#{food.name}&lt;/h:outputText&gt;基本上是不能显示值的,我必须做&lt;h:outputText value="#{food.name}"&gt;&lt;/h:outputText&gt;才能显示值,我的错误。

现在我正在寻找要过滤的 if 条件

【问题讨论】:

  • 你试过“==”吗?我必须假设字符串会匹配,因为我不知道里面是什么。
  • 是的,我试过了,字符串将在循环中匹配,我更新我的问题

标签: jsf el


【解决方案1】:

我曾尝试JSTLc:if 进行条件检查,但没有按预期工作,然后我通过堆栈溢出搜索此link 通过实现帮助我:

&lt;ui:fragment rendered="#{food.menu eq menu}"&gt;#{food.name}&lt;/ui:fragment&gt;

【讨论】:

    【解决方案2】:

    根据您的过滤需要的复杂程度,我会使用基本的 jsf 标签或自定义函数

    仅适用于几个选项:

    <c:if test="#{condition}">do stuff</c:if>
    

    对于有限数量的选项:

    <c:choose>
        <c:when test="#{condition1}">do stuff</c:when>
        <c:when test="#{condition2}">do other stuff</c:when>
        <c:otherwise>do something else</c:otherwise>
    </c:choose>
    

    对于 N 个选项,请查看此处的解决方案,您可以在其中使用自定义 EL 函数来执行 java 函数可以执行的任何操作:

    https://stackoverflow.com/a/7080174/2045820

    【讨论】:

    • 请仔细阅读stackoverflow.com/q/3342984为什么你的回答在这个问题的上下文中没有意义。作为建议,只要您不能可靠地回答问题,请尝试自己重现和测试问题中描述的问题,而不是在黑暗中进行拍摄。否则最好使用 cmets 部分。
    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2021-12-01
    • 1970-01-01
    • 2011-04-12
    • 2014-10-02
    • 2020-11-29
    • 2019-08-26
    • 2020-12-20
    相关资源
    最近更新 更多