2012-05-14 2 views
2

у меня есть это:УИ: повторить внутри Ui: повторить

<ui:repeat value="#{orderController.listRequestItem}" var="item"> 
.... 
<tbody> 
    <tr> 
    <td>#{item.product.codigoProduto}</td> 
    <td> 
    <ui:repeat value="#{item.product.materials}" var="m"> 
    #{m.description} 
    </ui:repeat> 
    </td> 
... 

The listRequestItem является:

public List<RequestItemVO> listRequestItem; 

и здесь я заселение его:

listRequestItem = new ArrayList<>(requestVO1.getRequestItem()); 

item.product.materials является :

public Set<MaterialVO> getMaterials() 
{ 
    //compiled code 
    throw new RuntimeException("Compiled Code"); 
} 

Когда я пытаюсь получить доступ к m на моем внутреннем <ui:repeat>, я не могу получить доступ к его методам.

#{item.product.codigoProduto} возвращает код продукта правильно.

ответ

4

<ui:repeat> не поддерживает Set<E>. Эта поддержка будет introduced в предстоящем JSF 2.2 (также для <h:dataTable>). JSF 2.2 будет выпущен уже в этом квартале.

В то же время его необходимо преобразовать в List. Есть несколько способов:

  • Изменить свойство быть List<MaterialVO> вместо и изменять код бизнес соответственно.

    private List<MaterialVO> materials; 
    
  • Или добавьте свойство обертки и используйте его вместо этого.

    public List<MaterialVO> getMaterialList() { 
        return new ArrayList<MaterialVO>(materials); 
    } 
    

    Это стоит дорого, поскольку на каждой итерации вызывается геттер. Вы можете добавить другое свойство, которое обертывает исходный набор.

  • Или создать пользовательскую функцию EL, которая делает работу:

    <ui:repeat value="#{util:setToList(item.product.materials)}" ...> 
    
  • Или создать пользовательский EL распознаватель. Деталь можно найти в этом ответе: How do I use a java.util.Set with UIData in JSF. Specifically h:datatable?

Эта проблема не связана с вложенности <ui:repeat>.

Смежные вопросы