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…
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… 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 !!!