могу ли я использовать одинвнутри другого - PullRequest
0 голосов
/ 22 мая 2018
<c:forEach var="expData" items="${expenseDataList}">
    <tr>
        <td>
            <div class="custom-control custom-checkbox">
                <label><aui:input
                            cssClass="custom-control-input expense select-all"
                            type="checkbox" data-amount="${expData.expenseAmount}" data-expenseid="${expData.expenseId}"
                            id="expenseCheckbox" name="expenseCheckbox" label="" /> 
                </label>
            </div>
        </td>
   ....                         
        <td>
            <c:forEach var="previewUrl1" items="${previewUrl}">
                <aui:button icon=" icon-download-alt"
                            style="border:none; background-color: #1E47C2; color:white"
                            data-previewurl="${previewUrl1}" cssClass="download"
                            name="downloadButton" id="downloadButton" />
            </c:forEach>
        </td>
    </tr>
</c:forEach>

Я использую внутри, и это создает 2 кнопки загрузки, потому что я повторяю еще одну кнопку рядом с загрузкой .. Я получаю значение внутри previewUrl1, но это создает 2 кнопки, поскольку это повторяется дважды, потому чтовнутри другого

Это мой код стороны портлета

long fileEntryId = 0L;
String previewURL = StringPool.BLANK;

List<String> s1=new ArrayList<String>();
try { 
    for (int i = 0; i < expenseDataList.size(); i++) {
         fileEntryId = expenseDataList.get(i).getFileEntryId();
         if (fileEntryId > 0) {
            FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(fileEntryId);
            previewURL = DLUtil.getPreviewURL(fileEntry, fileEntry.getFileVersion(), themeDisplay, StringPool.BLANK);
        }           
        renderRequest.setAttribute("previewUrl", previewURL);
        s1.add(previewURL);

        LOG.info("File Entries"+fileEntryId);
        LOG.info("Preview URl " + previewURL);
    }
LOG.info(s1);
renderRequest.setAttribute("previewUrl", s1);
} catch (Exception e) {
    e.printStackTrace();
}

1 Ответ

0 голосов
/ 22 мая 2018

Я не совсем понимаю ваше описание того, что происходит.Но если в вашем внутреннем цикле несколько итераций, вы генерируете повторяющиеся атрибуты id в двух случаях: во внешнем цикле для aui:input, во внутреннем цикле для aui:button.Согласно правилам HTML, идентификатор должен быть уникальным, иначе вы получите неопределенное поведение (или каждый элемент, кроме первого, игнорируемого)

Редактировать:

В своем коде вы используетеrenderRequest.setAttribute("previewUrl", previewURL);, например, вы установили ровно один previewURL.Позже вы изменяете этот атрибут на список с помощью renderRequest.setAttribute("previewUrl", s1); - не делайте этого: это делает ваш код неуправляемым и заставляет читателей (таких как я или другие здесь) думать, что previewURL - это единственное значение, когда это действительно список.

При этом: кажется, что у вас есть два списка с одинаковым количеством записей, и каждый элемент в одном списке ссылается на элемент с таким же индексом в другом списке.И если вы вложите эти списки, вы естественным образом отобразите все элементы списка 2 для каждого элемента списка 1. Таким образом: не вкладывайте циклы.Вам понадобится только один цикл, и вы получите доступ к соответствующему элементу из другого цикла напрямую по индексу.

У меня нет JSTL в моей мышечной памяти: в оставшемся (внешнем) forEach следите заindex (через varStatus, см. этот вопрос о том, как это сделать ) и используйте этот индекс для доступа к соответствующему элементу во втором списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...