List 将实体与EL相等运算符进行比较似乎永远不会返回true

List 将实体与EL相等运算符进行比较似乎永远不会返回true,list,jsf,el,equality,List,Jsf,El,Equality,我在一个实体列表上迭代,呈现一些带有特定图标的链接。我希望在迭代过程中根据当前活动的课程有条件地设置class属性值,如下所示,以便“活动”项获得不同的样式: <ui:repeat value="#{lessonBean.allLessons}" var="lesson"> <li> <h:form> <h:commandLink> <i class="#{les

我在一个实体列表上迭代,呈现一些带有特定图标的链接。我希望在迭代过程中根据当前活动的课程有条件地设置
class
属性值,如下所示,以便“活动”项获得不同的样式:

<ui:repeat value="#{lessonBean.allLessons}" var="lesson">
    <li>
        <h:form>
            <h:commandLink>
                <i class="#{lessonBean.currentLesson == lesson ? 'green' : ''}" />
            </h:commandLink>
        </h:form>
    </li>                                        
</ui:repeat>

  • 它在比较时似乎永远不会返回
    true
    ,因此永远不会打印
    绿色。我搜索了一些示例,并使用
    {view.viewId}
    找到了这些示例,但这不符合我的要求


    如何实现我的要求?

    如果
    课程
    实体没有正确实现该方法,则此构造将失败,因此表示相同“值”的两个实例将永远不相等

    据此行动。以下是一个基于实体技术ID的示例:

    private Long id;
    
    @Override
    public boolean equals(Object other) {
        return (other != null && getClass() == other.getClass() && id != null)
            ? id.equals(getClass().cast(other).id)
            : (other == this);
    }
    
    另见:

    我尝试了这个“#{lessonBean.lsn.id==lesson.id?”绿色“:”}”,但仍然没有变为真,所以这些没有返回预期值?那么,请确保它们返回预期值,以便比较将返回
    true