许多人检查一个列表是否包含另一个列表的元素

时间:2014-10-30 16:01:33

标签: java jsp

我有两个实体:购物传输,具有多对多关系。 我有用于编辑商店实体的页面,用户可以在其中看到商店的运输列表,如复选框。

向用户显示我正在为所有传输使用的所有传输:

<c:forEach items="${transports}" var="transport">
    <div class="checkbox">
        <label>
            <input type="checkbox" value="${transport.id}"> ${transport.name}
        </label>
    </div>
</c:forEach>

此页面上我还有一个购物对象,可以获取商店的运输清单。问题是当我显示所有运输清单时,我想标记为已检查商店的运输。 因此,用户将能够看到哪些传输属于商店,哪些不属于商店。

无法弄清楚如何在我的循环中检查它。提前谢谢。

EDITED

public boolean hasTransport(Transport transport, Integer id) {
        boolean result = false;
        for (Shop shop : transport.getShops()) {
            if (shop.getId().equals(id)) {
                result = true;
                break;
            }
        }
        return result;
    }

并在jsp页面上查看:

<c:forEach items="${transports}" var="transport">
<div class="checkbox">
    <label>
        <c:choose>
            <c:when test="${shop.hasTransport(transport, shop.id)}">
                <input type="checkbox" checked name="transportsId" value="${transport.id}"> ${transport.name}
            </c:when>
            <c:otherwise>
                <input type="checkbox" name="transportsId" value="${transport.id}"> ${transport.name}
            </c:otherwise>
        </c:choose>
    </label>
</div>
</c:forEach>

2 个答案:

答案 0 :(得分:2)

向Shop添加方法:

公共类商店{

......


private Set<Transport> transports;


public boolean hasTransport(Transport transport){
    //check if Set contains specified transport
    //implement equals/hasCode or iterate and check the Ids 

}

.....

}

如果您的应用程序符合Servlet Spec 3,您可以从EL中调用它:

<c:forEach items="${transports}" var="transport">
    <div class="checkbox">
        <label>
            <input type="checkbox" value="${transport.id}" checked="${shop.hasTransport(transport)}"/> ${transport.name}
        </label>
    </div>
</c:forEach>

答案 1 :(得分:0)

一个简单的解决方案是:

1)在Transport类中实现一个checker方法,它检查给定的Transport是否与给定的Shop有关系(Transport#isRelatedWith(Shop):boolean)

2)创建一个标签(可以是Java实现或JSP),它将使用checker方法设置复选框的状态

另一个解决方案(不推荐)是使用JSP所谓的scriptlet&lt;%code-goes-here%&gt;

来实现这个逻辑。