(Resolvido)JSF setar atributo de managed bean para gerar lista

Bom dia, amigos!
Estou iniciando em JSF facelets, venho tentando desenvolver uma simples listagem, mas tô encontrando muitos problemas.
Oque quero é:
Tenho um objeto Assunto que possui uma Categoria, O AssuntoBean possui um atributo idCategoria e um método que lista somente os Assuntos cujo idCategoria sejam iguais a Categoria.id
Então no momento em que fosse exibir a lista eu passaria este idCategoria como parâmetro e na teoria tudo daria certo, O erro é que não estou conseguindo setar esta propriedade no bean já tentei <c:set> . Devo estar entendendo a lógica do JSF erradamente
este é o código do meu bean Assunto:

public class AssuntoBean {

    private Integer idCategoria;
    private List<Assunto> assuntos;

    public AssuntoBean() {
        this.assuntos = new AssuntoDAO().listaTodos();
    }

    public List<Assunto> getAssuntos() {

        if (idCategoria != null) {

            for (Assunto a : assuntos) {
                List<Assunto> lista = new ArrayList<Assunto>();
                if (a.getCategoria().getId() == (getIdCategoria())) {
                    lista.add(a);
                }
                return lista;
            }
        }
        return assuntos;
    }

No .xhtml faço assim


<ui:repeat var="categoria" value="#{categoriaBean.categorias}">
            <tr>
              <th colspan="10">#{categoria.nome}</th>
            </tr>             
            //aqui teria que setar o bean, mas não sei como
            <ui:repeat var="assunto" value="#{categoriaBean.assuntos}">  
            
              <tr>
                <td class="alinha"><img src="img/new.jpg"></img></td>
                <td class="topicos">
                  <span><a href="topico.jsf">#{assunto.titulo}</a></span><br />
                  #{assunto.titulo}
                </td>
                <td class="alinha">x</td>
                <td class="alinha">x</td>
                <td class="alinha">19.08.2008 13:25 user:<a href="#">pejann</a></td>
              </tr>
              
            </ui:repeat>
            
            
          </ui:repeat>

Valeu a todos!

RAPAZ, não entendi muito bem oque vc quer,mas tenta usar ListDataModel no lugar de List…tb sou iniciante em JSF…

é mais facil vc usar um dataTable
vc tem uam lista e quer percorrer ela montado uma tabela dinamicamente
é isso ?
use a tag dataTabel do jsf

ex:

aqui é uma funcao para carregar a lista qu eu uso:

public void carregalistaItensPorProduto() throws SQLException {
		Map<String, Object> itens = new HashMap<String, Object>();
		listaItensPorProduto = new ArrayList<Map<String, Object>>();
		String cod_produto = getCodigo_produto();

		String sql = "select * from item where cd_produto = ?";
		PreparedStatement st = con.obterConexao().prepareStatement(sql);
		st.setString(1, cod_produto);
		ResultSet rs = st.executeQuery();
		while (rs.next()) {
			itens = new HashMap<String, Object>();

			itens.put("codigo", rs.getString("cd_item"));
			itens.put("nome", rs.getString("descricao"));
			itens.put("preco", DINHEIRO_REAL.format(rs.getDouble("preco")));

			listaItensPorProduto.add(itens);

		}

	}

e aqui como ficaria na camada de view:

<h:dataTable border="2" value="#{compras.listaItensPorProduto}"
			var="itens"
			>
			<h:column>
				<f:facet name="header">
					<h:outputText value="Codigo do Item" />
				</f:facet>
				<h:outputText value="#{itens.codigo}" />
			</h:column>
			<h:column>
				<f:facet name="header">
					<h:outputText value="Nome do Item" />
				</f:facet>
				<h:commandLink value="#{itens.nome}"
					action="#{compras.redirecionaDetalhesProduto}"
					onmousedown="setItem('#{itens.codigo}')" />
			</h:column>
			<h:column>
				<f:facet name="header">
					<h:outputText value="Preço do Item" />
				</f:facet>
				<h:outputText value="#{itens.preco}" />
			</h:column>
			<h:column>
				<h:commandButton image="images\button_cart-add.gif" action="#{compras.redirecionaCarrinho}" onmousedown="setItem('#{itens.codigo}')"/>
			</h:column>
		</h:dataTable>

Valeu, marcos, obrigado pela direção, agora sei por onde caminhar

Com o ListDataModel fica mais simples…sem falar que é uma classe feita para isso…

ListDataModel listaVendedor;
 setListaVendedor(new ListDataModel(dao.todosVendedores()));

no DAO vc adciona os objetos em um List…:wink:

 public java.util.List todosVendedores() {
        Session session = core.HibernateUtil.currentSession();
        org.hibernate.Query query = session.createQuery(
                " select vendedor " +
                " from  " +
                " Vendedor as vendedor ");
        
        return query.list();
    }

e na jsp fica como o nosso amigo marcos mostrou…

<h:dataTable width="75%" headerClass="ordersHeader" rowClasses="eventRon" cellspacing="0" value="#{actionVendedor.listaVendedor}" var="vdn" border="1">
                    
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="ID "/>
                        </f:facet>
                        <h:outputText value="#{vdn.id}"/>    
                    </h:column>
                    
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Nome"/>
                        </f:facet>
                        <h:outputText value="#{vdn.nome}"/>
                    </h:column>
                    
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Comissão em %"/>
                        </f:facet>
                        <h:outputText value="#{vdn.comissao}"/>
                        
                    </h:column>
                                       
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Editar"/>
                        </f:facet>
                        <h:commandLink value="Editar" immediate="true" action="#{actionVendedor.editar}" ></h:commandLink>
                    </h:column>
                    
                    
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Excluir"/>
                        </f:facet>
                        <h:commandLink immediate="true" ondblclick="submit()" value="Excluir" action="#{actionVendedor.deletar}" ></h:commandLink>
                    </h:column>
                </h:dataTable>

agora vc V qual se adequa melhor ao seu problema…:wink: espero ter ajudado …

Então amigos depois de ralar uns três dias tentando encontrar a solução quero comunicar a todos que resolvi o problema desse jeito:
No bean:

public List<Assunto> getAssuntos() {

        Categoria categoria = (Categoria) FacesContext.getCurrentInstance().
                getExternalContext().getRequestMap().get("Categoria");
        idCategoria = categoria.getId();
        List<Assunto> lista = new ArrayList<Assunto>();
        for (Assunto a : assuntos) {            
            if (a.getCategoria().getId() == (getIdCategoria())) {
                lista.add(a);
            }            
        }
        return lista;
    }

No meu xhtml não mudei nada ficou assim:

<ui:repeat var="Categoria" value="#{categoriaBean.categorias}">
            <tr>
              <th colspan="10">#{Categoria.nome}</th>
            </tr>                         
            <ui:repeat var="assunto" value="#{assuntoBean.assuntos}">              
              <tr>
                <td class="alinha"><img src="img/new.jpg"></img></td>
                <td class="topicos">
                  <span><a href="topico.jsf">#{assunto.titulo}</a></span><br />
                  #{assunto.titulo}
                </td>
                <td class="alinha">x</td>
                <td class="alinha">x</td>
                <td class="alinha">19.08.2008 13:25 user:<a href="#"></a></td>
              </tr>
              
            </ui:repeat>
            
            
          </ui:repeat>

Dessa forma eu tenho uma Lista de categoria e dentro dela seus respectivos assuntos. As coisas as vezes são tão simples e a gente complica né
Valeu, Abel e Marcos pela ajuda !!! :smiley: