使用EL等于运算符比较实体似乎永远不会返回true

时间:2015-05-07 07:31:05

标签: list jsf el equality

我正在迭代实体列表,使用特定图标呈现一些链接。我想在迭代期间根据当前活动课程有条件地设置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因此永远不会打印green。我搜索了一些示例,并使用#{view.viewId}找到了some solutions,但这不符合我的要求。

我如何达到我的要求?

1 个答案:

答案 0 :(得分:0)

如果Lesson实体没有正确实施Object#equals()方法,则此构造将失败,因此两个实例表示相同的&#34;值&#34;将永远不会平等。

相应地采取行动。以下是基于实体技术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);
}

另见: