No último artigo, concluímos a exibição do Datagrid dos dados JSON, mas não estava associado ao plano de fundo. Simplesmente exibimos os dados do JSON que fizemos. Nesta seção, integramos o JSON e o STRUTS2 para conectar a interação entre easyui e struts2.
1. Construção do ambiente JSON
O ambiente JSON é muito simples, basta importar o pacote json jar, como segue:
(Nota: JON-LIB-2.4 Endereço do pacote de jar: http://xiazai.vevb.com/201605/yuanma/json-lib-2.4(vevb.com).rar)
2. Melhore a ação
Existe uma propriedade no controle DataGrid que é URL, que pode especificar o endereço da URL dos dados solicitados. Na seção anterior, definimos diretamente esse endereço como um arquivo JSON específico. Aqui, definimos esse URL para uma ação, como o URL: 'category_queryJoinAccount.action', o que significa que o método de reação de QueryJoin da categoria será solicitada (o código do query.jsp será fornecido no final do artigo). Portanto, precisamos concluir o método do QueryJoinCoCount na categoriaActionAction.
Antes de integrar o STRUTS2 e o JSON, vamos dar uma olhada em quais solicitações foram enviadas para os dados JSON exibidos antes:
Como o tipo é uma propriedade da classe de categoria, implementamos a interface Modeldriven <Category> no BASEACTION, para que esse tipo seja encapsulado no modelo. Não precisamos nos preocupar com isso, podemos obtê -lo através do modelo. No entanto, precisamos obter os parâmetros de página e linhas enviados automaticamente pela Easyui, para que possamos adicionar duas variáveis de membro e linhas ao BasEmodel e implementar os métodos GET e Set. Finalmente, precisamos considerar uma coisa. Depois que todos esses parâmetros são obtidos, consultamos os dados no banco de dados com base nesses parâmetros. Então, onde colocamos os dados que encontramos? Ele também precisa ser empacotado no formato JSON e enviado para a recepção antes que ele possa ser exibido pelo Datagrid. Não consideramos como empacotar os dados da consulta no formato JSON. Primeiro, consideramos colocar esses dados em um só lugar. É natural pensar em usar o mapa, porque os dados no formato JSON estão na forma de valor-chave. Pensando nisso, continuamos a melhorar o BASEACTION:
@Controller ("Baseaction") @Scope ("Prototype") Public Class Baseaction <T> Estende o ACOCTIPPPORPT IPLEMENTE PEPLEAWARE, SESSIONCIAL, ApplicationAware, Modeldriven <T> {// página e linhas estão relacionadas à paginação. O Pagemap armazena os dados da consulta e os empacota no formato JSON. // página e linhas para implementar os métodos GET e Set. O PAGEMAP só precisa implementar o método GET, porque o Pagemap não recebe parâmetros de front-end, mas é a página inteira protegida; linhas inteiras protegidas; mapa protegido <string, objeto> pagemap = null; // Deixe que diferentes ações os implementam por si mesmos // omitem métodos de obter e definir .../******************************* @Resource Protected AccountService ContaService; // mapa protegido pelo objeto de domínio <string, object> request; mapa protegido <string, objeto> sessão; mapa protegido <string, objeto> aplicativo; @Override public void Stapplication (map <string, object> Application) {this.application = Application; } @Override public void SetSession (map <string, object> session) {this.session = session; } @Override public void setRequest (map <string, object> request) {this.request = request; } // modelo t protegido modelddriven; @Override public t getModel () {parameterledType type = (parameterledType) this.getclass (). GetGenericsuperclass (); Classe clazz = (classe) type.getActualTyPearguments () [0]; tente {model = (t) clazz.newInstance (); } catch (Exceção e) {lança nova RunTimeException (e); } Modelo de retorno; }} OK, depois de melhorar a categoria de base, podemos escrever o método de reação de QueryJoin na categoryActionAction. Excluímos todos os métodos originais na categoria, porque eles foram usados para testar ao construir o meio ambiente antes e não eram mais necessários. Agora realmente iniciamos o código do projeto:
@Controller ("CategoryAction") @Scope ("prototype") Categoria de classe pública estende Baseaction <scategory> {public String queryJoinCoCount () {// usado para armazenar os dados de pageMap = new Hashmap <string, object> (); // Consulte os dados correspondentes com base em palavras -chave e parâmetros de paginação. Escrevemos esse método em serviço. Naquela época, concluímos a lista de consultas em cascata <category> categoryList = categoryservice.QueryJoinCoCont (Model.getType (), página, linhas); pagemap.put ("linhas", categorylist); // armazenado no formato json. A partir do arquivo JSON na seção anterior, pode -se ver que uma chave é total e uma chave é linhas. Aqui armazenamos as linhas primeiro. // Consulta o número total de registros com base nas palavras -chave Long Total = categoryService.getCount (Model.getType ()); // Este método não foi escrito, vamos à camada de serviço para melhorá -lo mais tarde // System.out.println (total); pagemap.put ("total", total); // armazená -lo no formato JSON e, em seguida, armazena o retorno total "jsonmap"; }} Dessa maneira, escrevemos a ação. Agora, a ação recebe os parâmetros enviados da recepção e consulta o número total de registros do tipo especificado e todos os produtos do tipo especificado de acordo com os parâmetros. É armazenado de acordo com as chaves especificadas no JSON (ou seja, total e linhas) e colocadas no hashmap. Depois disso, desde que os dados neste hashmap sejam embalados no formato JSON e enviados para a recepção, eles podem ser exibidos pelo Datagrid. Primeiro, colocamos este hashmap, primeiro melhoramos o código da camada de serviço e depois empacotamos os dados neste hashmap.
3. Melhore o serviço da categoria
A partir da categoria de categoria acima, podemos ver que um método GetCount precisa ser adicionado à categoria Service e deve ser implementado na classe de implementação específica, como segue:
// CategoryService Interface Public Interface CategoryService Estende BaseService <Categoria> {// Informações da categoria de consulta, Lista pública de administrador em cascata <Categoria> QueryJoinAccount (Tipo de String, Int Page, Int Size); // consulta usando o nome da categoria // consulta o número total de registros com base nas palavras -chave public long getCount (tipo de string); } //CategoryServiceImpl implement class @SuppressWarnings("unchecked") @Service("categoryService") public class CategoryServiceImpl extends BaseServiceImpl<Category> implements CategoryService { @Override public List<Category> queryJoinAccount(String type, int page, int size) { String hql = "from Category c left join fetch c.account where c.Type Like: Type "; retorno getSession (). CreateEquery (HQL) .SetString ("tipo", "%" + tipo + "%") .setFirstresult (((página 1) * tamanho) // mostra o primeiro.setMaxResults (tamanho) // mostra vários .list (); } @Override public Long GetCount (String Type) {String HQL = "Selecione Count (C) da Categoria C onde C.Type Cike: Type"; return (longo) getSession (). createEquery (HQL) .SetString ("tipo", "%" + tipo + "%") .UnikeResult (); // retorna um registro: número total de registros}} Até agora, o caminho para obter dados neste banco de dados foi aberto. As duas primeiras etapas foram concluídas para recuperar dados da recepção-> Database->, e então começamos a embalar os dados armazenados no hashmap e depois o enviamos para a recepção.
4. Configure struts.xml
Embalagem Os dados especificados podem ser concluídos através da configuração no Struts.xml. Vamos primeiro olhar para a configuração em struts.xml:
<Truts> <constante name = "struts.devmode" value = "true"/> <names package = "shop" estende = "json-default"> <!-Jason-Default herda struts-default-> <! Ação configurada na primavera, porque deve ser entregue ao gerenciamento da mola-> <ação name = "category_*" method = "{1}"> <!-você deve adicionar o pacote json primeiro e depois herdar o json-default acima-> <objeto de resultado = "jsonmap" type = "json"> <!-para convers Blacklists, filtrar opções desnecessárias e suportar a expressão regular JSON FORMAT: {Total: 3, linhas: [{conta: {id: 2, login: "user", nome: "atendimento ao cliente a", passa: "user"}, hot: true, id: 3,…}}-> <param name = "exclua>-<! aqui. Um bug no CSDN, seguirei a imagem e a colocarei abaixo-> </amul> </cost> </action> <ação name = "account_*" method = "{1}"> <nome do resultado = "index">/index.jsp </resultado> </ação> <!-A ação usada para concluir o acionamento do sistema "> Solt. name = "send">/web-inf/{1}/{2} .jsp </resultado> </action> </package> </struts>A partir da configuração acima, podemos ver que, antes de tudo, o pacote deve herdar o JSON-Default, porque o JSON-Default herda o padrão de sujeira, porque existe um Struts2-json-plugin-2.3.24.1.Jar no pacote JSON JAR. Você pode abri-lo e ver que existe um struts-plugin.xml dentro. Você pode abri-lo e ver que o JSON-Default herda o padrão de suportes:
Em seguida, eu configuro <SILLD>, o nome é a sequência retornada apenas por ação e o tipo deve ser correspondido ao JSON. Depois, há os parâmetros no resultado. Primeiro de tudo, o parâmetro que deve ser correspondido ao nome como root. Esse parâmetro deve ser correspondido ao objeto Hashmap que precisa ser convertido agora, ou seja, o Pagemap que definimos. Com a configuração deste parâmetro, o Struts empacotará os dados no Formato JSON no formato JSON. Em seguida, configure a lista negra. A lista negra significa dizer struts que campos não precisam ser embalados ao embalagem, como informações sobre senhas de administrador. No formato Jason no comentário acima, você pode ver que linhas [0] .Account.Pass representa o campo de senha, mas deve haver mais de um dados, portanto, precisamos usar expressões regulares para representá -lo, para que todas as senhas não sejam embaladas no JSON.
5. Modify query.jsp Conteúdo
Nesse ponto, embalamos os dados no formato JSON. Em seguida, melhoraremos o conteúdo do Front-end Query.jsp para fazer a exibição do Datagrid corretamente:
<%@ página linguagem = "java" import = "java.util.*" PageEncoding = "utf-8"%> <! $ (function () {$ ('#dg'). DataGrid ({// O endereço de url é alterado para solicitar a categoriaActionAction Url: 'category_queryJoinCoCount.action', loadmsg: 'carregamento ... Listrado: verdadeiro, agora, verdadeiro, SingleSelect: True, Paginação: True, RowStyler: Function (Index, Row) {Console.info ("Index" + index + "," Linha) se (index % 2 == 0) {retornar 'Background-Color: #FF;'; {field:'checkbox',checkbox:true}, {field:'id',title:'number',width:200} //The field fields here should be the same as those in the database, that is, they should be the same as those in the json data]], columns:[[ {field:'type',title:'Category name',width:100, //field type formatter: function(value,row,index){ return "<pan>" + valor + "</span>"; }}, {Field: 'Hot', Title: 'Hot', Largura: 100, // Formateira Hot Field: function (valor, linha, index) {if (value) {// Se estiver quente, o valor é verdadeiro e o valor é uma variável booleana retorna "<input Type = 'Caixa de seleção' verificada = 'Disabled' 'True' ''; // tick} else {return // Não verifique}}}, {Field: 'Account.login', Title: 'Administrator', Width: 200, //account.loginadMinistrator Nome de login Formatter: function (valor, linha, index) {if (row.account! // Se o nome de login não estiver vazio, exiba o nome de login} else {return "Não existe administrador nesta categoria"; }}}]]}); }); </script> </ad head> <body> <tabela id = "dg"> </itlast> </body> </html> 6. O teste mostra os resultados
Por fim, vamos testar os resultados da exibição do Datagrid, como segue:
Nesse ponto, integramos com sucesso o Struts2 e o JSON, e agora podemos transmitir dados no formato JSON para o primeiro plano.
(Nota: No final, fornecerei o download do código -fonte de todo o projeto! Todos são bem -vindos para coletar ou compartilhar)
Endereço original: http://blog.csdn.net/eson_15/article/details/51332758
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.