Antes, concluímos a lógica de negócios relacionada às categorias de produtos e, em seguida, começamos a fazer a parte específica do produto.
1. Crie tabelas no banco de dados e modelos de mapa
Primeiro, criamos uma nova tabela no banco de dados e depois usamos engenharia reversa para mapear a tabela em uma classe modelo, a tabela é a seguinte:
/*======================================================================= ========================================================================// Crie produto de tabela ( /* Número do produto, crescimento automático* /id int a chave primária, não nulo auto_increntry, /* nome do produto* /nome varchar (20), /* Preço do produto* /preço decimal (8,2), /* Picture* /pic Varchar (200), /* Product Brief Introdução* /SomentText, /* Produto Detalhes* /XREM Seja um produto recomendado, ele pode ser exibido na página inicial do shopping */ Comentário,/ *Seja um produto válido, pode ser exibido na página inicial do shopping */ Open Bool,/ *O número da categoria da categoria de referência do produto (CID INT, CID_FK CAIL (CID) (CID) (ID);
Não vou entrar em detalhes sobre o uso do mapeamento de engenharia reversa para modelar a classe. Mencionei anteriormente como usar a engenharia reversa para gerar modelo.
2. Complete a camada de serviço e a arquitetura de ação da categoria de produto
2.1 Arquitetura da camada de serviço para categorias de produtos
Como a categoria anterior, o produto também precisa ter um serviço para operar a lógica de negócios relacionada ao produto, por isso temos que escrever uma estrutura de produtos de produtos e produtos do ProductionServiceImpl, que é o seguinte:
// Interface Products Service herda BasEserservice <Product> Interface pública Products Service estende BaseService <Production> {} // ProductServiceImpl implementa Products ServiceImpl <Product> classe herda BasserviceImpl <Production> e implementa a interface do produto acima {"ProductsPertice) <ProductoderviceTriceMPLEMPLIMPLETIMPLIMPIMPRICE {" ProductService ") e implementa a classet. 2.2 Estrutura de ação das categorias de commodities
Primeiro, precisamos melhorar as anotações na camada de serviço em Baseaction
@Controller ("Baseaction") @Scope ("Prototype") Public Class Baseaction <T> Estende o ACOCTIPPPORT IMPLEMPENDO APLICAÇÃO, SESSIGNAYEARE, ApplicationAware, Modeldriven <T> {@Resource Protected Products Service; // outro código é omitido ou o código original ...} Em seguida, escrevemos um produto para herdar o método:
classe pública ProductAction estende o Baseaction <Product> {}Nesse ponto, a arquitetura de back -end do produto foi basicamente construída e a próxima etapa é melhorar as funções específicas e a lógica de negócios.
3. Complete a estrutura básica da recepção
A estrutura básica da recepção é a mesma da categoria de commodities. Vamos dar uma olhada em quais documentos estão disponíveis para a categoria de commodities acabadas:
Primeiro, copiamos uma cópia na pasta do produto com base nos arquivos da recepção de sua categoria de produto e, em seguida, fazemos alterações correspondentes. Vamos analisar o processo primeiro: primeiro, index.jsp para aindex.jsp exibir a barra de menus à esquerda. Ao clicar no gerenciamento da categoria, digite a página Categoria/query.jsp para exibir todas as informações da categoria do produto à direita. As funções de pesquisa e exclusão estão nesta página. Não há necessidade de exibir uma nova janela, adicionar uma janela pop-up save.jsp e update.jsp janela. Ao clicar no gerenciamento do produto, digite a página Produto/query.jsp para exibir todas as informações do produto no lado direito. As funções de pesquisa e exclusão são concluídas nesta página. Adicionando e atualizando o salv.jsp e o update.jsp, respectivamente, aparecem. Em seguida, criaremos a estrutura de cada página e preencheremos a parte correspondente.
Primeiro, adicione o código a seguir em Aindex.jsp:
Em seguida, concluímos a estrutura do query.jsp:
<%@ página linguagem = "java" import = "java.util.*" PageEncoding = "utf-8"%> <! margem: 1px; } .searchbox {margin: -3; } </style> <script type = "text/javascript"> $ (function () {$ ('#dg'). DataGrid ({// altere o endereço de URL para o método de ceryJoincategory no nome da solicitação/URL: 'Product_QueryJoincateGory.Action', carregamento: 'Carreging ... O valor do parâmetro está vazio, indicando que queremos exibir todos os produtos você configura esse campo, a alteração da página não afetará os itens selecionados ao girar a página // Definição da barra de ferramentas Adicionar, excluir, atualizar botões e pesquisar barra de ferramentas: [{iconCls: 'icon-add', text: 'adicionar produto', manipulador: function () {// adicionar código de griger}, '-', {iconCs: 'ICON- (// Adicionar código de griger},'-', {iconS // Adicione o código de griger}}, '-', {icoNCls: 'icon-remevOve', texto: 'excluir produto', manipulador: function () {// Adicionar código de gatilho}}, '-', {// o botão de consulta não é um linkbutton, ele tem syntax, mas também suporta o tag html. nome = 'ssrach' /> "}], rowstyler: function (index, linha) {console.info (" index " + index +", " + line) if (index % 2 == 0) {return 'background-color: #fff;'; } else {return 'background-color:#c4e1e1;'; } }, frozenColumns:[[ {field:'checkbox',checkbox:true}, {field:'id',title:'Product number',width:100} ]], columns:[[ {field:'name',title:'Product name',width:100}, {field:'price',title:'Product price',width:100}, {field:'remark',title:'simple Descrição ', largura: 100}, {field:' xremark ', título:' Descrição detalhada ', largura: 100}, {field:' date ', título:' tempo de liberação ', largura: 100}, {field:' elogio ', título:' Produto recomendado ', largura: 100, função: função (value,' index) {{'{se desativado = 'true' "; } else {return "<input type = 'Caixa de seleção' desabilitada = 'true'"; }}}, {field: 'Open', title: 'Produto válido', largura: 100, formatador: function (valor, linha, index) {if (value) {return } else {return "<input type = 'Caixa de seleção' desabilitada = 'true'"; }}}, {field: 'category.type', título: 'categoria do produto', largura: 200, //category.type é a categoria do produto formatador: function (valor, linha, index) {if (row.category! // Se a categoria de produto não estiver vazia, retorne a categoria do produto} else {retorna "Este produto não é classificado por enquanto"; }}}]]}); // Converta a caixa de texto comum em uma caixa de texto de pesquisa de consulta $ ('#ss'). Searchbox ({// Trigger Query Event Searcher: function (value, nome) {// Valor representa o valor de entrada // Adicionar código de gatilho}, prompt: 'Por favor, digite a palavra -chave de pesquisa'}); }); </script> </ad head> <body> <tabela id = "dg"> </itlast> </body> </html> Em seguida, concluímos o método de Queryjoincategory em ProductAction. Antes disso, devemos concluir a parte do serviço. Vamos desenvolvê -lo lentamente a partir da camada inferior:
// Interface do ProductService Public Interface ProductService estende BasEService <Product> {// Informações do produto de consulta, categorias em cascata Lista pública <Production> QueryJoincateGory (Tipo de String, Int Page, Int Size); // consulta usando o nome do produto // consulta o número total de registros com base nas palavras -chave public Long GetCount (tipo de string); } @Suppresswarnings ("desmarcado") @service ("ProductService") Classe pública ProductsViceImpl estende o BasEserViceImpl <Product> implementa o ProductService {@Override public list <Production> queryJoincateGory (Nome da String, Int Page, Int Size). retorno getSession (). CreateEquery (HQL) .SetString ("Nome", "%" + nome + "%") .SetFirstresult (((página 1) * tamanho) // Show .SetMaxResults (tamanho) // mostra vários .list (); } @Override public Long GetCount (Nome da String) {String HQL = "Selecione Count (P) do Produto P onde P.Nome Like: Name"; return (longo) getSession (). CreateEquery (HQL) .SetString ("Nome", "%" + Nome + "%") .UnikeResult (); // retorna um registro: número total de registros}} O método de Queryjoincategory no Production pode ser concluído:
@Controller ("Production") @Scope ("prototype") classe pública ProductAction estende Baseaction <Product> {public String QueryJoincateGory () {System.out.println ("Nome:" + Model.getName ()); System.out.println ("página:" + página); System.out.println ("linhas:" + linhas); // usado para armazenar dados paginos pagemap = new hashmap <string, object> (); // consulta os dados correspondentes de acordo com as palavras -chave e a lista de parâmetros de paginação <ProductList> ProductList = ProductService.QueryJoincateGory (Model.getName (), Page, linhas); pagemap.put ("linhas", lista de produtos); // armazenamento no formato json // consulta o número total de registros com base em palavras -chave long Total = ProductService.getCount (Model.getName ()); // armazenamento no formato json retorna "jsonmap"; }} Em seguida, configure -o em struts.xml e o mesmo processo da categoria de produto anterior. A partir daqui, você pode ver que, depois de desenvolver um, o seguinte será em breve:
<ação name = "Product_*" Method = "{1}"> <Resultado Nome = "JSONMAP" TIPO = "JSON"> <param name = "root"> pagemap </param> <param name = "excludeProperties"> <!-linhas [0] .category.Account-> <!-Filtre todas as contas, caso contrário, os problemas de LAZY. A seguinte captura de tela desta parte-> </amp> </sould> </action>Dessa forma, o programa de segundo plano é escrito, depois abre o Tomcat e o teste. Quando clicamos no gerenciamento do produto na barra de menus à esquerda, a seguinte janela à direita será exibida:
Dessa forma, concluímos a estrutura da janela de gerenciamento de produtos.
Endereço original: http://blog.csdn.net/eson_15/article/details/51354932
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.