Не знаете, как перебирать поставляемые «предметы?» [Дублировать]

Да пример от nixlike работает очень хорошо.

Инвентарь:

[docker-host]
myhost1 user=barbara
myhost2 user=heather

playbook:

---

- hosts: localhost
  connection: local         

     tasks:    
        - name: loop debug inventory hostnames
          debug: 
            msg: "the docker host is {{ item }}"
          with_inventory_hostnames: docker-host
        - name: loop debug items
          debug: 
            msg: "the docker host is {{ hostvars[item]['user'] }}"
          with_items: "{{ groups['docker-host'] }}"

output:

ansible-playbook ansible / tests / vars-test-local.yml

PLAY [localhost]


TASK [setup] ****************** ************************************************* ОК : [localhost]

TASK [идентификаторы хостов для отладки цикла] ******************************** ********** ok: [localhost] => (item = myhost2) => {"item": "myhost2", "msg": "хост докера - это myhost2"} ok: [localhost] => (item = myhost1) => {"item": "myhost1", "msg": "хост докера - это myhost1"}

TASK [элементы отладки цикла] ******* ************************************************* ОК : [localhost] => (item = myhost1) => {"item": "myhost1", "msg": "хост докера - это barbara"} ok: [localhost] => (item = myhost2) => {" item ":" myhost2 "," msg ":" хост докера - это вереск "}

PLAY RECAP ********************** *********************************************** localhost: ok = 3 changed = 0 unreachable = 0 failed = 0

спасибо!

7
задан BalusC 3 February 2012 в 22:50
поделиться

2 ответа

Вызвано: javax.servlet.ServletException: javax.servlet.jsp.JspTagException: не знаю, как перебирать поставленные «элементы» в <forEach>

Это произойдет, когда <c:forEach items> не ссылается на действительный объект, по которому он может итерации. Объект должен быть Object[] (простой массив), Collection , Map , Iterator , Enumeration или String (см. также исходный код ). Все, что еще нельзя повторить с помощью <c:forEach>. Ваш DetResults класс не является экземпляром любого из вышеупомянутых типов, поэтому он не сработает.

Ваш класс DetResults выглядит неправильно. Он выглядит в основном как один бог-боб со совокупностью всех свойств нескольких отдельных объектов. Это неправильно. Класс bean должен представлять не более одного объекта. Перепишите свой класс DetResults, чтобы в итоге вы получили полноценную коллекцию javabeans:

List<DetResult> results = detDAO.fetchDetResults(paramBean);

, чтобы вы могли получить к ней доступ следующим образом:

<c:forEach items="${results}" var="result">
    ${result.heading}
    <c:forEach items="${result.data}" var="dataItem">
        ${dataItem}
    </c:forEach>
</c:forEach>

вы действительно настаиваете на том, чтобы сохранить свой DetResults bean-компонент по своему усмотрению, вы можете получить к нему доступ следующим образом:

<c:forEach begin="0" end="${results.columnCount}" varStatus="loop">
    ${results.headings[loop.index]}
    <c:forEach items="${results.data[loop.index]}" var="dataItem">
        ${dataItem}
    </c:forEach>
 </c:forEach>

См. также:


Не имеет отношения к конкретная проблема, атрибут <c:forEach var> неверен. Вы не должны указывать то же имя, что и существующий объект в области. Это будет только столкновение. Но это вопрос нового вопроса, если вы не можете интерпретировать сообщение об ошибке.

24
ответ дан Community 25 August 2018 в 08:54
поделиться

Вы должны иметь возможность перебирать заголовки

<tr>
<c:foreach var="heading" items="${results.headings}">
  <th>${heading}</th>
</c:foreach>
</tr>

И затем по данным ...

<c:foreach var="row" items="${results.data}">
  <tr>
  <c:foreach var="i" items="${row}">
    <td>${i}</td>
  </c:foreach>
  </tr>
</c:foreach>

Или что-то в этих строках?

1
ответ дан EMS 25 August 2018 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: