JSTL Проверьте, соответствует ли значение в массиве второму массиву - PullRequest
0 голосов
/ 16 марта 2012

это я снова. По сути, я проверяю роли пользователя, когда он попадает на страницу. Это массив, скажем, 1,2,3. Содержимое последнего столбца в jsp для тестирования имеет роли #, которые прикреплены к каждому отдельному вложению. Последний столбец не будет на готовом продукте, но мне нужно сделать что-то вроде IF для этого массива, чтобы увидеть, есть ли какие-либо значения в массиве:

<c:forEach items = "${hotPartRoles}" var = "hpRole"> 
    ${hpRole.id}
    </c:forEach>

находятся в массиве ролей вложения:

<c:forEach items = "${item.roles}" var = "role"> 
                    ${role.id}
                    </c:forEach>

JSP:

<table class="data_table">
<tr>
    <th>Attachments</th>
    //These are the user's Roles
    <c:forEach items = "${hotPartRoles}" var = "hpRole"> 
    ${hpRole.id}
    </c:forEach>

</tr>
<tr>
    <td class="subtable">
    <table class="data_table">
    <c:choose>
        <c:when test='${empty attachList}'>
           <tr>
              <td>No Attachments</td>
           </tr>
        </c:when>
        <c:otherwise>
            <tr>
                <th>Remove Attachment</th>
                <th>File Name</th>
                <th>File Type</th>
                <th>File Size (bytes)</th>
                <th>File Attached By</th>
                <th>Date/Time File Attached</th>
                <th>Roles</th>
            </tr>
            <c:forEach var="item" items="${attachList}" varStatus="loopCount">
                <tr>

                    <td class="button">
                    <rbac:check operation="<%=Operation.DELETE%>">
                        <button type="button"  onclick="javascript:delete_prompt(${item.id});">Delete</button>
                    </rbac:check>
                        </td>
                    <td><a href="show.view_hotpart_attachment?id=${item.id}">${item.fileName}</a></td>
                    <td>${item.fileType}</td>
                    <td><fmt:formatNumber value="${item.fileSize}" /></td>
                    <td>${item.auditable.createdBy.lastName}, ${item.auditable.createdBy.firstName}</td>
                    <td><fmt:formatDate value="${item.auditable.createdDate}" pattern="${date_time_pattern}" /></td>
                    <td>
                    <c:forEach items = "${item.roles}" var = "role"> 
                    ${role.id}
                    </c:forEach>
                    </td>
                </tr>
            </c:forEach>
        </c:otherwise>
    </c:choose>
    </table>

Теперь массивы должны точно совпадать, просто значение в массиве пользовательских ролей находится в массиве ролей вложений ....

Мне нужно сделать здесь проверку, чтобы определить, стоит ли ставить флаг отключения на кнопку «удалить»:

 <rbac:check operation="<%=Operation.DELETE%>">
                        <button type="button"  onclick="javascript:delete_prompt(${item.id});">Delete</button>
                    </rbac:check>
                        </td>
                    <td>

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Создайте пользовательскую функцию EL (которая должна быть статическим методом в классе и правильным дескриптором в вашем файле TLD). Например, метод с подписью boolean contains(Collection collection, Object object). И затем назовите это как <c:if test="x:contains(list, object)">

1 голос
/ 16 марта 2012

Выполнение 2-х вложенных для циклов и изначально установка переменной в false, затем установка в true и проверка этой переменной, похоже, работает

   <c:forEach var="item" items="${attachList}" varStatus="loopCount">
            <c:set var="dispVal" value="false"/>
            <c:forEach items = "${item.roles}" var = "role"> 
                <c:forEach items = "${hotPartRoles}" var = "hpRole"> 
                        <c:if test="${hpRole.id == role.id}">
                      <c:set var="dispVal" value="true"/>
                        </c:if>
                    </c:forEach>
                </c:forEach>

                <tr>

                    <td class="button">
                    <rbac:check operation="<%=Operation.DELETE%>">

                        <button type="button"<c:if test="${dispVal != 'true'}"> disabled="disabled"</c:if>  
                            onclick="javascript:delete_prompt(${item.id});">Delete</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...