Estou há tempos procurando fazer uma paginação utilizando somente o Struts 2, mas não consegui fazer. Sei que no JSF existe um componente para isso, mas como já estou terminando meu projeto utilizando o Struts não quero ter de trocar o Framework.
Alguém sabe alguma forma de fazer essa paginação, tem algum tutorial ou exemplo? Também estou utilizando o Hibernate.
Dê uma olhada na DisplayTag, uma excelente taglib para paginação de dados que se integra muito bem com o Struts 2.
S
solimarPJ
Guilherme Mello,
Olhei e comecei a implementar o DisplayTag. Agradeço pela dica.
Mas estou enfrentando algumas dificuldades.
Coloquei o atributo “pagesize” da “table” para tentar fazer a paginação. O DisplayTag mostrou a qtde de registro e os números de páginas que tinha, quando tento paginar da o seguint erro:
javax.servlet.jsp.JspException: Attribute whith name ‘title’ + not found
at org.apache.tiles.taglib.AttributeTagSupport.doStartTag(AttributeTagSupport.java:108)
at org.apache.jsp.template.layoutLogin_jsp._jspx_meth_tiles_005fimportAttribute_005f0(layoutLogin_jsp.java:129)
at org.apache.jsp.template.layoutLogin_jsp._jspService(layoutLogin_jsp.java:67)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:414)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Utilize o atributo requestURI da displaytag para ele avançar as páginas. Utilize como valor, a página atual.
S
solimarPJ
Muito obrigado. Deu certo, agora está paginando.
Mais uma pergunta! Como é que eu faço para estar mudando de cores e layout a disponibilização da tabela do displayTag?
Como colocar a paginação embaixo da lista?
To começando a mexer agora com o DisplayTag.
Obrigado.
G
Guilherme_MelloPJ
Solimar, para customizar a displaytag, basta criar o arquivo displaytag.properties no seu classpath. Você pode tomar como base o conteúdo do arquivo properties que devem dentro do JAR da displaytag. A partir dessa configuração, você pode ir customizando seu grid de acordo com a necessidade.
S
solimarPJ
Como faço para passar um parâmetro através de uma uma url do displaytag para a Action do Struts 2?
Já olhei nos exemplos da net, mas não consegui entender!
estou utilizando as propriedades da tag Column como: href, paramId, paramProperty, sortable, paramScope…
Estava utilizando o “iterator” do struts e passando através das tags “url”, “param” e “a href”. Ia para a action configurada e direto para os atributo que eu tinha os get e set na Action.
A minha jsp é essa:
<%@taglibprefix="s"uri="/struts-tags"%><%@tagliburi="http://displaytag.sf.net"prefix="display"%><%request.getAttribute("listaUsuario");%><html><center><divclass="titleDiv"><s:textname="application.title"/></div><center><h1><s:textname="label.usuarios"/></h1></center><s:urlid="url"action="usuario"namespace="/manterUsuario"method="carregarIncluirUsuario"/><s:ahref="%{url}"><s:textname="label.usuario.incluir"/></s:a> <s:setname="login"scope="session"value="login"/><s:urlid="url"action="usuario"namespace="/manterUsuario"method="paginaPrincipal"></s:url><s:ahref="%{url}"><s:textname="label.pagina.principal"/></s:a><br><br><s:formaction="usuario"namespace="/manterUsuario"method="post"><s:textfieldname="usuario.nomeLogin"key="label.consulta.por.login"></s:textfield><s:submitname="action"key="label.consultar"cssClass="butStnd"method="carregarConsultarUsuario"></s:submit></s:form><display:tablename="<%=request.getAttribute("listaUsuario")%>"class="borderAll"pagesize="5"id="usu"requestURI=""><display:columnproperty="nomeLogin"title="Nome Login"/><display:columnproperty="nome"title="Nome Usuario"/><display:columnproperty="senhaLogin"title="Senha Login"/><display:columnproperty="descricaoSexo"title="Descricao Sexo"/><display:columnproperty="descricaoPerfil"title="Perfil"/><display:columnproperty="dataNasc"title="Data de Nascimento"/><display:columnproperty="descricaoUF"title="UF"/><display:columnproperty="endereco"title="Endereço"/><display:columnproperty="telefone"title="Telefone"/><display:columnproperty="descricaoCurso"title="Curso"/><display:columnproperty="matricula"title="Matricula"/><display:columnclass="nowrap"property="nomeLogin"href="usuario"title="Alterar"sortable="true"paramId="nomeLogin"paramProperty="nomeLogin"paramScope="request"><s:urlid="url"action="usuario"namespace="/manterUsuario"method="carregarAlterarUsuario"><s:paramname="nomeLogin"value="usu.nomeLogin"/></s:url><s:ahref="%{url}"><s:textname="label.alterar"/></s:a> </display:column></display:table></center></html>
A maneira de chamar um método pelo Struts 2 é diferente, pelo menos como eu aprendi!
Fica ai mais uma vez meu agradecimento pela ajuda.
Também consegui customizar a tabela com o arquivo “displaytag.properties”.
Ótimo. Qualquer dúvida estamos por aqui.
S
solimarPJ
Ola,
Alguém sabe como eu mostro as listas de radio button do struts 2 em colunas?
Tentei colocar,mas automaticamente ele já vem com um
e quebra a linha.
Eu tenho de colocar uma tabela como na primeira figura, mas com o struts eu consigo igual à segunda figura.
S
solimarPJ
Boa tarde.
Eu estou com uma dúvida na exportação do displaytag para PDF.
Peguei um exemplo, conseguir colocar até uma figura para representar para qual extensão quero exportar.
o código é o seguinte:
<center><h1><s:textname="label.usuarios"/></h1></center><s:urlid="url"action="usuario"namespace="/manterUsuario"method="carregarIncluirUsuario"/><s:ahref="%{url}"><s:textname="label.usuario.incluir"/></s:a> <s:setname="login"scope="session"value="login"/><s:urlid="url"action="usuario"namespace="/manterUsuario"method="paginaPrincipal"></s:url><s:ahref="%{url}"><s:textname="label.pagina.principal"/></s:a><br><br><jsp:scriptlet>request.setAttribute("listaUsuario",request.getAttribute("listaUsuario"));</jsp:scriptlet><display:tablename="listaUsuario"class="borderAll"pagesize="5"id="usu"requestURI=""export="true"><display:setPropertyname="export.pdf"value="true"/><display:setPropertyname="export.excel"value="false"></display:setProperty><display:setPropertyname="export.csv"value="false"></display:setProperty><display:setPropertyname="export.xml"value="false"></display:setProperty><display:columnproperty="nome"title="Nome Usuario"/><display:columnproperty="senhaLogin"title="Senha Login"/><display:columnproperty="descricaoSexo"title="Descricao Sexo"/><s:iftest="perfis.size == 1"><display:columnproperty="descricaoPerfil"title="Perfil"/></s:if><s:iftest="perfis.size != 1"><display:columnvalue="Mais de 1 perfil"title="Perfil"/></s:if><display:columnproperty="dataNasc"title="Data de Nascimento"/><display:columnproperty="descricaoUF"title="UF"/><display:columnproperty="endereco"title="Endereço"/><display:columnproperty="telefone"title="Telefone"/><display:columnproperty="descricaoCurso"title="Curso"/><display:columnproperty="matricula"title="Matricula"/><display:columnclass="nowrap"property="nomeLogin"href="usuario!carregarAlterarUsuario.action"title="Alterar"sortable="true"paramId="nomeLogin"paramProperty="nomeLogin"/></display:table>
Mas o link que é gerado para fazer a exportação é de um link utilizado dentro da pagina, chamando um outro método que não tem nada com exportação. Como faço para referenciar diretamente à exportação? Já pesquisei no arquivo “.properties” do displaytag e não vi referencia dessa.
Desde já agradeço.
G
Guilherme_MelloPJ
solimar:
Ola,
Alguém sabe como eu mostro as listas de radio button do struts 2 em colunas?
Tentei colocar,mas automaticamente ele já vem com um
e quebra a linha.
Eu tenho de colocar uma tabela como na primeira figura, mas com o struts eu consigo igual à segunda figura.
Você pode criar um template específico de acordo com a sua necessidade. Essa feature funciona muito bem.
Basta editar o template Freemarker referente a tag que vocês está utilizando e pronto.
Eu estou com uma dúvida na exportação do displaytag para PDF.
Peguei um exemplo, conseguir colocar até uma figura para representar para qual extensão quero exportar.
o código é o seguinte:
<center><h1><s:textname="label.usuarios"/></h1></center><s:urlid="url"action="usuario"namespace="/manterUsuario"method="carregarIncluirUsuario"/><s:ahref="%{url}"><s:textname="label.usuario.incluir"/></s:a> <s:setname="login"scope="session"value="login"/><s:urlid="url"action="usuario"namespace="/manterUsuario"method="paginaPrincipal"></s:url><s:ahref="%{url}"><s:textname="label.pagina.principal"/></s:a><br><br><jsp:scriptlet>request.setAttribute("listaUsuario",request.getAttribute("listaUsuario"));</jsp:scriptlet><display:tablename="listaUsuario"class="borderAll"pagesize="5"id="usu"requestURI=""export="true"><display:setPropertyname="export.pdf"value="true"/><display:setPropertyname="export.excel"value="false"></display:setProperty><display:setPropertyname="export.csv"value="false"></display:setProperty><display:setPropertyname="export.xml"value="false"></display:setProperty><display:columnproperty="nome"title="Nome Usuario"/><display:columnproperty="senhaLogin"title="Senha Login"/><display:columnproperty="descricaoSexo"title="Descricao Sexo"/><s:iftest="perfis.size == 1"><display:columnproperty="descricaoPerfil"title="Perfil"/></s:if><s:iftest="perfis.size != 1"><display:columnvalue="Mais de 1 perfil"title="Perfil"/></s:if><display:columnproperty="dataNasc"title="Data de Nascimento"/><display:columnproperty="descricaoUF"title="UF"/><display:columnproperty="endereco"title="Endereço"/><display:columnproperty="telefone"title="Telefone"/><display:columnproperty="descricaoCurso"title="Curso"/><display:columnproperty="matricula"title="Matricula"/><display:columnclass="nowrap"property="nomeLogin"href="usuario!carregarAlterarUsuario.action"title="Alterar"sortable="true"paramId="nomeLogin"paramProperty="nomeLogin"/></display:table>
Mas o link que é gerado para fazer a exportação é de um link utilizado dentro da pagina, chamando um outro método que não tem nada com exportação. Como faço para referenciar diretamente à exportação? Já pesquisei no arquivo “.properties” do displaytag e não vi referencia dessa.
Desde já agradeço.
Não entendi muito bem o seu problema. A exportação é bem simples, não tem nada demais. Basta ativar a exportação e pronto. Ele gera o PDF automaticamente. Você quer fazer a geração do PDF através de um método que você criou ? Tente explicar melhor sua dúvida.
S
solimarPJ
Eu ativei a exportação, mas ele não esta gerando o PDF!
Não estou querendo fazer através de método não. Mas quando passo o mouse por cima da figura para que ele gere o PDF, mostra um método que eu utilizo na jsp para outra funcionalidade (consultarUsuario).
Muito obrigado. Sobre o Displaytag, consegui exportar para PDF.
Sobre o Struts 2, vou fazer o que você falou. Vou fazer o template e a configuração.
Muito obrigado mesmo.
Valeu
G
Guilherme_MelloPJ
solimar:
Muito obrigado. Sobre o Displaytag, consegui exportar para PDF.
Sobre o Struts 2, vou fazer o que você falou. Vou fazer o template e a configuração.
Muito obrigado mesmo.
Valeu
Ok. Leia a documentação sobre a cração de custom themes, é bem fácil criar e estender um theme de acordo com a sua necessidade.
Qualquer dúvida, poste aqui!
S
solimarPJ
Ola.
Preciso de mais uma ajudazinha.
Consegui fazer a alteração no .ftl, mas gostaria de saber como faço para colocar um “tema” novo, específico no meu “src” e configurá-lo no struts.xml para a tag específica.
Consegui mudar e fazer resultado mudando diretamente no “struts2-core.jar”, mas ai ele faz mudança em quase todas as outras tags.
Coloquei o arquivo no meu “src”, como configuro no struts.xml apontando para a tag “<s:radio list=”"/>" ?