В последней статье мы завершили отображение данных DATAGRID данных JSON, но это не было связано с фоном. Мы просто отобразили данные JSON, которые мы сделали сами. В этом разделе мы интегрировали JSON и Struts2, чтобы соединить взаимодействие между EasyUI и Struts2.
1. Строительство среды JSON
Среда JSON очень проста, просто импортируйте пакет JSON JAR, следующим образом:
(Примечание: json-lib-2.4.
2. Улучшить действие
В управлении DataGrid есть свойство, которое является URL -адресом, который может указать адрес URL -адреса запрошенных данных. В предыдущем разделе мы напрямую установили этот адрес в конкретный файл JSON. Здесь мы установили этот URL на действие, такое как URL: 'Category_queryjoinaccount.action', что означает, что метод Queryjoinaccount в CategoryAction будет запрошен (Кодекс Query.jsp будет предоставлен в конце статьи). Таким образом, нам нужно завершить метод Queryjoinaccount в категории.
Прежде чем интегрировать Struts2 и JSON, давайте посмотрим, какие запросы были отправлены для данных JSON, отображаемых ранее:
Поскольку тип является свойством класса категории, мы внедрили интерфейс модели <Category> в базеации, поэтому этот тип будет инкапсулирован в модель. Нам не нужно беспокоиться об этом, мы можем получить ее через модель. Тем не менее, нам необходимо получить параметры страницы и строк, автоматически отправляемые easyUI, поэтому мы можем добавить страницу двух переменных членов и строки в BaseModel и реализовать методы GET и SET. Наконец, нам нужно рассмотреть одну вещь. После того, как все эти параметры получаются, мы запросим данные в базе данных на основе этих параметров. Итак, куда мы поместили данные, которые мы нашли? Он также должен быть упакован в формат JSON и отправить на стойку регистрации, прежде чем он может быть отображен DataGrid. Мы не рассматриваем, как упаковать данные запроса в формат JSON. Сначала мы рассмотрим размещение этих данных в одном месте. Естественно думать об использовании карты, потому что данные в формате JSON в форме ключевой стоимости. Думая об этом, мы продолжаем улучшать базеацию:
@Controller ("baseaction") @scope ("прототип") открытый класс Baseaction <t> расширяет действия. PageMap хранит данные запроса, а затем упаковывает их в формат JSON. // Страница и ряды для реализации методов GET и SET. PageMap должен только реализовать метод GET, потому что PageMap не получает параметров передних конечных, но является защищенной целочисленной страницей; защищенные целочисленные ряды; Защищенная карта <String, Object> pageMap = null; // Пусть различные действия реализуют их сами по себе // Опустить методы получения и установки .../************************* @Resource защищенная учетная сервис; // Защищенный домен объект Map <String, Object> запрос; Защищенная карта <строка, объект> сеанс; Защищенная карта <строка, объект> приложение; @Override public void setApplication (map <string, Object> Application) {this.Application = Application; } @Override public void setSession (map <string, object> session) {this.session = session; } @Override public void setRequest (map <string, объект> запрос) {this.Request = request; } // Модель защищенная T модель; @Override public t getModel () {parameterizedType type = (parameterizedType) this.getClass (). GetGenericSuperClass (); Класс clazz = (class) type.getactualtypearguments () [0]; try {model = (t) clazz.newinstance (); } catch (Exception e) {бросить новое runtimeexception (e); } return Model; }} Хорошо, после улучшения базовой категории мы можем написать метод Queryjoinaccount в категории. Мы удаляем все исходные методы в категории, потому что они использовались для тестирования при создании окружающей среды, и они больше не нужны. Теперь мы действительно запустили код проекта:
@Controller ("CategyOrachAction") @Scope ("Prototype") Общедоступный категория класса Extends Baseaction <Category> {public String QueryJoinaccount () {// используется для хранения данных Paging Pagemap = new Hashmap <String, Object> (); // Запросить соответствующие данные на основе ключевых слов и параметров пейджинг. Мы написали этот метод в эксплуатации. В то время мы заполнили список каскадных запросов <Category> CategoryList = CategoryService.QueryJoinaccount (model.getType (), page, row); pagemap.put ("Rows", CategoryList); // хранятся в формате JSON. Из файла JSON в предыдущем разделе видно, что ключ общий, а ключ - это строки. Здесь мы сначала храним ряды. // Запрос общего количества записей на основе ключевых слов LONG Total = CategoryService.getCount (model.getType ()); // Этот метод не был записан, давайте перейдем на уровень обслуживания, чтобы улучшить его позже // system.out.println (total); pagemap.put ("total", total); // хранить его в формате JSON, а затем хранить полную возврат "jsonmap"; }} Таким образом, мы написали действие. Теперь действие получает параметры, отправленные с стойки регистрации, а затем запрашивает общее количество записей указанного типа и всех продуктов указанного типа в соответствии с параметрами. Он хранится в соответствии с ключами, указанными в JSON (то есть общий и ряды) и помещается в HashMap. После этого, до тех пор, пока данные в этом HashMap упакованы в формат JSON и отправляются на стойку регистрации, они могут отображаться DataGrid. Сначала мы поместили этот хэшмап, сначала улучшили код уровня обслуживания, а затем упаковывают данные в этом хэшмапе.
3. Улучшение категории
Из приведенной выше категории мы видим, что метод GetCount должен быть добавлен в категорию, и он должен быть реализован в конкретном классе реализации, следующим образом:
// категория интерфейса интерфейса общего интерфейса CategoryService Extends BaseResvice <Категория> {// Информация о категории запросов, Cascading Administrator Public List <Категория> QueryJoinaccount (тип строки, int page, int size); // Запрос, используя имя категории // Запрос общего количества записей на основе ключевых слов Public Long GetCount (тип строки); } // CategoryServiceImpl реализация класса @suppresswarnings ("unchecked") @service ("CategoryService") Общедоступный CategoryServiceImpl Extends BaseServiceImpl <Категория> Категория категория, int size {string jquory hq hq hq hq hq hq hq hq hq hq hq c.account, где c.type like: type "; return getSession (). CreateQuery (hql) .setString ("type", "%" + type + "%") .setFirstresult (((Page-1) * size) // Показать с первого one.setMaxResults (size) // Показать несколько .list (); } @Override public long getCount (String type) {string hql = "select count (c) из категории C, где c.type like: type"; return (long) getsession (). CreateQuery (hql) .setString («type», «%» + type + «%»). Uniqueresult (); // возвращать запись: общее количество записей}} До сих пор был открыт путь к получению данных в этой базе данных. Первые два шага были выполнены для извлечения данных из стойки регистрации-> базы данных->, а затем мы начинаем упаковать данные, хранящиеся в HashMap, а затем отправляем их на стойку регистрации.
4. Настройка struts.xml
Упаковка Указанные данные могут быть заполнены посредством конфигурации на struts.xml. Давайте сначала посмотрим на конфигурацию в struts.xml:
<struts> <constant name="struts.devMode" value="true" /> <package name="shop" extends="json-default"><!-- jason-default inherits struts-default --> <global-results> <result name="aindex">/WEB-INF/main/aindex.jsp</result> </global-results> <!-- class corresponds to the id value of the Action Настройка весной, потому что его следует передать на управление пружиной-> <name = "category_*" method = "{1}"> <!-Вы должны сначала добавить пакет JSON, а затем наследуйте JSON-defaul выше-> <result name = "jsonmap" type = "json"> <!-чтобы преобразовать данные в объект json-> <parama name = "root"> pagem? Черные списки, фильтр ненужных опций и поддержка регулярного выражения Формат JSON: {Total: 3, Rows: [{account: {id: 2, login: «Пользователь», имя: «Служба поддержки клиентов A», Pass: «Пользователь»}, HOT: TRUE, ID: 3,…}]}-> <MAME = «EXCORPROPERPERSES»> <! отображаться здесь. Ошибка в CSDN, я буду следить за изображением и помесчу его ниже-> </param> </result> </action> <name = "account_*" method = "{1}"> <name = "index">/index.jsp </result> </action> <!-Действие, используемое для завершения запроса системы, все запросы передаются на выполнение. name = "send">/web-inf/{1}/{2} .jsp </result> </action> </package> </struts>Из приведенной выше конфигурации мы видим, что, прежде всего, пакет должен унаследовать JSON-Default, потому что JSON-Default наследует Struts-Default, потому что есть Struts2-Json-Plugin-2.3.24.1.jar в пакете JSON JAR. Вы можете открыть его и увидеть, что внутри есть стойки-plugin.xml. Вы можете открыть его и увидеть, что JSON-Default наследует настройки Default:
Далее я настраиваю <sult>, имя - это строка, возвращаемая просто действием, и тип должен быть сопоставлен с JSON. Тогда есть параметры в результате. Прежде всего, параметр, который должен быть сопоставлен с именем в качестве корня. Этот параметр должен быть сопоставлен с объектом HashMap, который необходимо преобразовать только сейчас, то есть в PageMap, который мы определили. С помощью конфигурации этого параметра стойки будут упаковывать данные в формате PageMap в формат JSON. Затем настройте черный список. Черный список означает сообщать стойки, какие поля не нужно упаковать при упаковке, например, информация о паролях администратора. Из формата Jason в комментарии выше вы можете видеть, что строки [0] .Account.Pass представляют поле пароля, но должно быть более одного данных, поэтому мы должны использовать регулярные выражения, чтобы представлять его, чтобы все пароли не были упакованы в JSON.
5. Изменить контент Query.jsp
На этом этапе мы упаковали данные в формат JSON. Далее мы улучшим содержание фронтального Query.jsp, чтобы правильно отображать DataGrid:
<%@ page language = "java" import = "java.util.*" pageencoding = "UTF-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <cead> <%@ include = "/public/jass. $ (function () {$ ('#dg'). DataGrid ({// адрес URL -адреса изменяется на URL -адрес запроса CategoryAction: 'Category_QueryJoinaccount.Action', LoadMSG: 'загрузка ......', QueryParams: {type: ''}, // Параметры типа, не нужно проходить определенные типы, потому что мы хотим отображать все // wildmol: 300. Полосы: TRUE, NOWRAP: TRUE, SingleSelect: True, Pagination: True, Rowstyler: Function (index, row) {console.info ("index" + index + "," + row) if (index % 2 == 0) {return 'founal-color: #fff;'; {Field: 'Facebox', флажок: true}, {Field: 'id', заголовок: 'number', width: 200} // Поля поля здесь должны быть такими же, как и в базе данных, то есть они должны быть такими же, как и в данных JSON]], Columns: [[{Field: 'type', Title: 'Categine', width: 100, // field typect: вернуть "<pan>" + value + "</span>"; }}, {Field: 'hot', заголовок: 'hot', width: 100, // Field Hot Formatter: function (значение, строка, индекс) {if (value) {// Если оно горячее, значение верно, а значение - это логическая переменная return "<input type = 'checkbox' проверено = 'проверено' disabled = 'true'"; // tick} else {return "<input type = 'fackbox' disable = 'true'"; // Не проверяйте}}}, {Field: 'Account.Login', заголовок: 'Администратор', ширина: 200, //Account.loginadministrator formater name: function (value, row, index) {if (row.account! = Null && row.account.login! // Если имя входа не пустое, отобразите имя входа} else {return "В этой категории нет администратора"; }}}]]}); }); </script> </head> <body> <table id = "dg"> </table> </body> </html> 6. Тест показывает результаты
Наконец, давайте проверим результаты отображения DataGrid следующим образом:
На этом этапе мы успешно интегрировали Struts2 и JSON, и теперь мы можем передавать данные в формате JSON на передний план.
(Примечание: В конце концов, я предоставлю исходный код загрузку всего проекта! Приглашаем ли каждый сбор или поделиться)
Оригинальный адрес: http://blog.csdn.net/eson_15/article/details/51332758
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.