2

私はこれを持っています:

<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>
...

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

1 に答える 1

4

<ui:repeat>サポートしていませんSet<E>。このサポートは、次の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リゾルバーを作成します。詳細はこの回答にあります:JSFでUIDataでjava.util.Setを使用するにはどうすればよいですか。具体的にはh:datatable?

この問題は、ネストとは関係ありません<ui:repeat>

于 2012-05-14T15:25:00.623 に答える