Раньше мы завершили бизнес -логику, связанную с категориями продуктов, а затем начали делать конкретную часть продукта.
1. Создание таблиц в базе данных и моделях карт
Сначала мы создаем новую таблицу в базе данных, а затем используем обратную инженерию для составления таблицы в класс модели, таблица заключается в следующем:
/*========================================================================= ========================================================================== Создать продукт таблицы ( /* номер продукта, автоматический рост* /id int Первичный ключ, а не null auto_increment, /* имя продукта* /имя varchar (20), /* цена продукта* /цена десятичная (8,2), /* изображение продукта* /pic varch является рекомендуемым продуктом, он может отображаться на домашней странице торгового центра */ Comment Bool,/ *, будь то действительный продукт, он может отображаться на домашней странице торгового центра */ Open Bool,/ *Номер категории продукта находится */ CID Int, ограничение CID_FK Foreign Key (CID) категория (ID));
Я не буду вдаваться в подробности об использовании обратного инженерного картирования для модельного класса. Ранее я упоминал, как использовать обратную инженерию для генерации модели.
2. Заполните сервисный уровень и архитектуру действий категории продукта
2.1 Архитектура сервисного уровня для категорий продуктов
Как и в предыдущей категории, продукт также должен иметь услугу для управления бизнес-логикой, связанной с продуктом, поэтому мы должны написать структуру Product Service и Productserviceimpl, которая заключается в следующем:
//ProductService interface inherits BaseService<Product> public interface ProductService extends BaseService<Product> { } //ProductServiceImpl implements ProductServiceImpl<Product> class inherits BaseServiceImpl<Product> and implements the above ProductService interface @Service("productService") public class ProductServiceImpl extends BaseServiceImpl<Product> implements ProductService { } 2.2 Структура действий товарных категорий
Во -первых, нам нужно улучшить аннотации на уровне обслуживания в базеатровании
@Controller ("baseaction") @scope ("Прототип") открытый класс Baseaction <t> расширяет действия, реализует запрос, SessionAware, Applicationaware, ModelDriven <T> {@Resource Procected Productservice ProductService; // другой код опущен, или исходный код ...} Затем мы пишем продукт, чтобы наследовать метод:
ProductAction ProductAction ProductAction расширяет BaseAction <Продукт> {}На этом этапе бэкэнд -архитектура продукта была в основном построена, и следующим шагом является улучшение конкретных функций и бизнес -логики.
3. Заполните основную структуру стойки регистрации
Основная структура стойки регистрации такая же, как и у категории товара. Давайте посмотрим, какие документы доступны для готовой товарной категории:
Сначала мы копируем копию в папку продукта на основе файлов стойки регистрации в категории продукта, а затем вносим соответствующие изменения. Давайте сначала проанализируем процесс: во -первых, index.jsp на aindex.jsp отобразите строку меню слева. Нажав на управление категориями, введите страницу категории/Query.jsp, чтобы отобразить всю информацию о категории продуктов справа. Функции поиска и удаления находятся на этой странице. Нет необходимости всплыть в новое окно, добавить всплывающее окно save.jsp и окно update.jsp. Нажав на управление продуктом, введите страницу продукта/Query.jsp, чтобы отобразить всю информацию о продукте с правой стороны. Функции поиска и удаления выполнены на этой странице. Добавление и обновление save.jsp и update.jsp соответственно всплывает. Затем мы создадим структуру каждой страницы, а затем заполним соответствующую часть.
Сначала добавьте следующий код в aindex.jsp:
Далее мы завершаем структуру Query.jsp:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <%@ inclod Полевая: 1px; } .searchbox {margin: -3; } </style> <script type = "text/javascript"> $ (function () {$ ('#dg'). DataGrid ({// Изменить адрес URL на метод QueryJoinCategory в URL ProductAction: 'product_queryjoincateory.action', loadmsg: 'Loading ......', QueryParams: {name: 'wome:' wome: 'wome:' wome: 'wome:' wome: 'wome:' wome: 'wome:' wome: 'wome:' wome: 'wome:' wome: 'hame,//hame,',//name, ',//hame asemersg. Значение параметра пусто, что указывает на то, что мы хотим отобразить все продукты. Обновление, если вы настраиваете это поле, изменение страницы не повлияет на выбранные элементы при повороте страницы // Определение панели инструментов Добавить, удалить, обновлять кнопки и панель инструментов function () {// Добавить код триггера}}, '-', {iconcls: 'icon-remove', text: 'delete product', handler: function () {// добавить код триггера}}, '-', {// Кнопка запроса не является Linkbutton, он имеет синтаксис, но он также поддерживает parsing html: '<<<s идентификатор' 'sems' 'smos' 'smos' semb name = 'ssrach' /> "}], rowstyler: function (index, row) {console.info (" index " + index +", " + row) if (index % 2 == 0) {return 'фоновый цвет: #fff;'; } else {return 'fackground-color:#c4e1e1;'; }}, Frozencolumns: [[{Field: 'fackbox', флажок: true}, {Field: 'id', название: «Номер продукта ', ширина: 100}]], колонки: [[{Field:' name ', заголовок:« Название продукта », ширина: 100}, {Field:' Price 'Title: Описание ', ширина: 100}, {Field:' xRemark ', заголовок: «Подробное описание», ширина: 100}, {поле: «Дата», заголовок: «Время выпуска», ширина: 100}, {поле: «Похвала», заголовок: «Рекомендуемый продукт», ширина: 100, формат: function (value) disabled = 'true' "; } else {return "<input type = 'fackbox' disabled = 'true'"; }}}, {Field: 'open', title: 'допустимый продукт', ширина: 100, формататер: function (value, row, index) {if (value) {return "<input type = 'fackbox' fected = 'fected' disabled = 'true'"; } else {return "<input type = 'fackbox' disabled = 'true'"; }}}, {field: 'Category.type', заголовок: 'Категория продукта', ширина: 200, //category.type - это формататер категории продукта: функция (значение, row, index) {if (row.category! // Если категория продукта не пуста, вернуть категорию продукта} else {return »Этот продукт не классифицируется на данный момент»; }}}]]}); // Преобразовать обычное текстовое поле в текстовое поле поиска запроса $ ('#SS'). SearchBox ({// Searcher Everie Query Query: Function (значение, имя) {// значение представляет значение ввода // Добавить код триггера}, «Запрос: 'Пожалуйста, введите ключевое слово search'}); }); </script> </head> <body> <table id = "dg"> </table> </body> </html> Далее мы завершаем метод Queryjoincategory в ProductAction. Перед этим мы должны завершить обслуживание. Мы будем медленно развивать его из нижнего слоя:
// productservice interface public interface productservice extends baseService <Продукт> {// Запрос информации о продукте, категории категорий категорий общедоступного <Продукт> QueryJoincategory (тип строки, int page, int size); // Запрос с использованием названия продукта // Запрос общего количества записей на основе ключевых слов Public Long GetCount (Type); } @SuppressWarnings("unchecked") @Service("productService") public class ProductServiceImpl extends BaseServiceImpl<Product> implements ProductService { @Override public List<Product> queryJoinCategory(String name, int page, int size) { String hql = "from Product p left join fetch p.category where p.name like :name"; return getSession (). CreateQuery (hql) .setString ("name", "%" + name + "%") .setFirstresult (((Page-1) * size) // show .setMaxResults (size) // Показать несколько .list (); } @Override public long getCount (string name) {string hql = "select count (p) из продукта p, где p.name like: name"; return (long) getsession (). CreateQuery (hql) .setString («имя», «%» + name + "%"). uniqueresult (); // возвращать запись: общее количество записей}} Метод Queryjoincategory в ProductAction может быть завершен:
@Controller ("ProductAction") @Scope ("Prototype") Public Class Production Extens Baseaction <production> {public String Queryjoincategory () {System.out.println ("name:" + model.getName ()); System.out.println ("Page:" + Page); System.out.println ("Rows:" + Rows); // используется для хранения страниц данных PageMap = new HashMap <String, Object> (); // Запросить соответствующие данные в соответствии с ключевыми словами и параметрами пейджинга pagemap.put ("Rows", ProductList); // хранение в формате JSON // Запрос общего количества записей на основе ключевых слов LONG TOTE = Productservice.getCount (model.getName ()); // хранилище в формате json возвращает "jsonmap"; }} Затем настройте его на struts.xml и тот же процесс, что и предыдущая категория продукта. Отсюда вы можете увидеть, что после его разработки будет следующее в ближайшее время:
<name = "product_*" method = "{1}"> <result name = "jsonmap" type = "json"> <param name = "root"> pagemap </param> <param name = "excludeproperties"> <!-Rows [0] .category.Account-> <!-Фильтр из всех задач. Следующий скриншот этой части-> </param> </result> </action>Таким образом, фоновая программа написана, затем откройте Tomcat и протестируйте ее. Когда мы нажимаем на управление продуктом в строке меню слева, появится следующее окно справа:
Таким образом, мы закончили структуру окна управления продуктом.
Оригинальный адрес: http://blog.csdn.net/eson_15/article/details/51354932
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.