마지막 기사에서는 JSON 데이터의 Datagrid 디스플레이를 완료했지만 배경과 관련이 없었습니다. 우리는 단순히 우리가 만든 JSON 데이터를 표시했습니다. 이 섹션에서는 JSON 및 Struts2를 통합하여 EasyUI와 Struts2 사이의 상호 작용을 연결했습니다.
1. JSON 환경의 구성
JSON 환경은 매우 간단합니다. 다음과 같이 JSON JAR 패키지를 가져 오십시오.
(참고 : JSON-LIB-2.4의 JAR 패키지 다운로드 주소 : http://xiazai.vevb.com/201605/yuanma/json-lib-2.4(Vevb.com).rar)
2. 행동을 향상시킵니다
Datagrid 컨트롤에는 URL 인 속성이 있으며 요청 된 데이터의 URL 주소를 지정할 수 있습니다. 이전 섹션에서는이 주소를 특정 JSON 파일로 직접 설정합니다. 여기서 우리는이 URL을 URL : 'category_queryjoinaccount.action'과 같은 조치로 설정합니다. 즉, 카테고리 액션의 queryjoinaccount 메소드가 요청됩니다 (query.jsp 코드는 기사 끝에 제공됩니다). 따라서 카테고리 션에서 queryjoinaccount 메소드를 완료해야합니다.
Struts2 및 JSON을 통합하기 전에 이전에 표시된 JSON 데이터에 대한 요청이 무엇인지 살펴 보겠습니다.
유형은 카테고리 클래스의 속성이므로 Baseection에서 ModelDriven <Catechory> 인터페이스를 구현 하므로이 유형은 모델에 캡슐화됩니다. 우리는 그것에 대해 걱정할 필요가 없으며 모델을 통해 얻을 수 있습니다. 그러나 EasyUI가 자동으로 전송하는 페이지 및 행 매개 변수를 얻어야하므로 두 개의 멤버 변수 페이지와 행을베이스 모드에 추가하고 Get and Set 메소드를 구현할 수 있습니다. 마지막으로, 우리는 한 가지를 고려해야합니다. 이러한 모든 매개 변수를 얻은 후에는 이러한 매개 변수를 기반으로 데이터베이스의 데이터를 쿼리합니다. 그래서 우리는 우리가 찾은 데이터를 어디에 넣습니까? 또한 Datagrid가 표시하기 전에 JSON 형식으로 포장하고 프론트 데스크로 보내야합니다. 쿼리 데이터를 JSON 형식으로 패키지하는 방법을 고려하지 않습니다. 먼저이 데이터를 한 곳에 두는 것을 고려합니다. JSON 형식의 데이터는 키 값 형태이기 때문에 MAP 사용을 생각하는 것이 당연합니다. 이를 생각하면 우리는 계속해서 Baseection을 향상시킵니다.
@Controller ( "Baseeaction") @Scope ( "프로토 타입") 공개 클래스 BASEECIP <T>는 ActionSupport Ampess RequestAware, SessionAware, ApplicationAware, ModelDriven <T> {페이지 및 행이 페이징과 관련이 있습니다. Pagemap은 쿼리 데이터를 저장 한 다음 JSON 형식으로 패키지합니다. // get and set 메소드를 구현하기위한 페이지 및 행. Pagemap은 프론트 엔드 매개 변수를 수신하지 않지만 정수 페이지를 보호하기 때문에 Get 메소드 만 구현하면됩니다. 보호 된 정수 행; protected Map<String, Object> pageMap = null;//Let different Actions implement them by themselves//Omit get and set methods... /*************************** The following is still the original BaseAction part****************************/ //service object @Resource protected CategoryService categoryService; @Resource Protected AccountserVice AccountService; // 도메인 객체 보호 된 맵 <문자열, 개체> 요청; 보호 맵 <문자열, 객체> 세션; 보호 된 맵 <문자열, 객체> 응용 프로그램; @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, object> request) {this.request = request; } // ModelDriven Protected T 모델; @override public t getModel () {ParameterizedType type = (ParameterizedType) this.getClass (). getGenericSuperClass (); 클래스 Clazz = (class) type.getActualTyPearguments () [0]; try {model = (t) clazz.newinstance (); } catch (예외 e) {throw new runtimeexception (e); } 반환 모델; }} 자, 기본 범주를 향상시킨 후 QueryJoinAccount 메소드를 카테고리 션에 쓸 수 있습니다. 전 환경을 구축 할 때 테스트에 사용되었고 더 이상 필요하지 않았기 때문에 모든 원래 방법을 카테고리 션에서 삭제합니다. 이제 우리는 실제로 프로젝트 코드를 시작했습니다.
@Controller ( "CategoryAction") @Scope ( "프로토 타입") public class categoryAction은 BaseAction <범주> {public String QueryJoinAccount () {// 페이징 Pagemap의 데이터를 저장하는 데 사용됩니다. // 키워드 및 페이징 매개 변수를 기반으로 해당 데이터를 쿼리합니다. 우리는이 방법을 사용하여 작성했습니다. 당시 캐스케이드 쿼리 목록 <Cat pagemap.put ( "행", CategoryList); // JSON 형식으로 저장되었습니다. 이전 섹션의 JSON 파일에서 키는 총계이고 키는 행입니다. 여기서 우리는 행을 먼저 저장합니다. // 키워드를 기준으로 총 레코드 수를 쿼리합니다. 긴 총 = CategoryService.getCount (model.getType ()); //이 메소드는 쓰여지지 않았으며, 서비스 계층으로 이동하여 나중에 그것을 개선하기 위해 // system.out.println (Total); pagemap.put ( "총", 총); // JSON 형식으로 저장 한 다음 Total Return "JsonMap"을 저장합니다. }} 이런 식으로, 우리는 행동을 썼습니다. 이제 작업은 프론트 데스크에서 전송 된 매개 변수를 가져온 다음 지정된 유형의 총 레코드 수와 매개 변수에 따라 지정된 유형의 모든 제품 수를 쿼리합니다. JSON에 지정된 키 (즉, 총 및 행)에 따라 저장되고 해시 맵에 배치됩니다. 그 후,이 해시 맵의 데이터가 JSON 형식으로 패키지되어 프론트 데스크로 전송되는 한 DataGrid에서 표시 할 수 있습니다. 먼저이 해시 맵을 넣고 먼저 서비스 계층 코드를 개선 한 다음이 해시 맵에 데이터를 포장합니다.
3. 카테고리 서비스 개선
위 카테고리에서 GetCount 메소드를 카테고리 서비스에 추가해야하며 다음과 같이 특정 구현 클래스에서 구현해야 함을 알 수 있습니다.
// CategoryService 인터페이스 공용 인터페이스 범주를 확장하여 BaseService <범주> {// 쿼리 카테고리 정보, 캐스케이드 관리자 공개 목록 <Cat // 카테고리의 이름을 사용하여 쿼리 // 키워드를 기반으로 총 레코드 수를 쿼리 공개 long getCount (문자열 유형); } // categoryServiceImpl class @suppresswarnings ( "선택 취소") @Service ( "CategoryService") 공개 클래스 카테고리를 확장합니다. asserviceimpl <category> remements categoryService {@override public list <category <category joinaccount (문자열 page, int page, int count) {string hql = " C.type가 좋아하는 곳 : type "; return getsession (). createquery (HQL) .SetString ( "type", "%" + type + "%") .setFirstresult ((Page-1) * size) // 첫 번째 One.setMaxResults (size) // 여러 .list (); } @override public long getCount (문자열 유형) {String HQL = "CATTORY C에서 COUR (C) C.Type가 좋아요 : 유형"; return (long) getSession (). Createquery (HQL) .SetString ( "type", "%" + type + "%") .uiqueresult (); // 레코드 반환 : 총 레코드 수}} 지금 까지이 데이터베이스에서 데이터를 얻는 경로가 열렸습니다. 첫 두 단계는 프론트 데스크-> 데이터베이스->에서 데이터를 검색하기 위해 완료된 다음 해시 맵에 저장된 데이터를 포장 한 다음 프론트 데스크로 보냅니다.
4. struts.xml을 구성하십시오
포장 지정된 데이터는 struts.xml의 구성을 통해 완료 할 수 있습니다. 먼저 struts.xml의 구성을 살펴 보겠습니다.
<struts> <constant name = "struts.devmode"value = "true"/> <packue name = "shop"extends = "json-default"> <!-Jason-Default Struts-default-> <global-results> <result name = "aindex">/web-inf/main/aindexsp </result> <! 스프링 관리에 전달되기 때문에-> <action name = "category_*"method = "{1}"> <!-먼저 JSON 패키지를 추가 한 다음 위의 json-default를 상속해야합니다-> <result name = "jsonmap"type = "json"> <!-json 객체로 변환해야합니다.> </parmap> <! 블랙리스트, 필터 불필요한 옵션 및 정규식 json 형식을 지원합니다. 여기에 표시됩니다. CSDN의 버그는 이미지를 따르고 아래에 넣을 것입니다 .-> </param> </resent> </action> <action name = "account_*"method = "{1}"> <result name = "index">/index.jsp </action> <! <! </action> <! name = "send">/web-inf/{1}/{2} .jsp </resent> </action> </package> </struts>위의 구성에서 JSON-DEFAULT는 Struts-Default를 상속 받기 때문에 JSON-DEFAULT를 상속해야한다는 것을 알 수 있습니다. 당신은 그것을 열고 내부에 struts-plugin.xml이 있는지 확인할 수 있습니다. 당신은 그것을 열고 Json-Default가 Struts-default를 상속받는 것을 볼 수 있습니다.
다음으로 <result>를 구성하고 이름은 액션에 의해 반환 된 문자열이며 유형은 JSON과 일치해야합니다. 그런 다음 결과에는 매개 변수가 있습니다. 우선, 이름과 이름과 일치 해야하는 매개 변수입니다. 이 매개 변수는 지금 방금 변환 해야하는 해시 맵 객체에 일치해야합니다. 이 매개 변수의 구성으로 Struts는 Pagemap의 데이터를 JSON 형식으로 패키지합니다. 그런 다음 블랙리스트를 구성하십시오. 블랙리스트는 관리자 암호에 대한 정보와 같이 포장 할 때 포장 할 때 어떤 필드를 포장 할 필요가 없는지 스트럿에게 알리는 것을 의미합니다. 위의 주석의 Jason 형식에서 Rows [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 전환 // en"> <html> <head> <%@ public/head.jspf "%> $ () {$ ( '#dg'). Datagrid ({// URL 주소는 범주에 변경되었습니다. 범주 ActionAction URL : 'Category_QueryJoinAccount.action', loadmsg : 'loading ......', QueryParams : {type : ''}, // 유형 매개 변수, 여기에 특정 유형을 표시 할 필요가 없습니다. Striped : True, SingleSelect : True, Paglination : True, Rowstyler : 함수 (Index, Row) {console.info (index " + index +", " + row (index % 2 == 0) {else} else}; {field : 'checkbox', checkbox : true}, {field : 'id', title : 'number', 'number', width : 200} // 여기 필드 필드는 데이터베이스의 필드와 동일해야합니다. 즉, JSON 데이터의 필드와 동일해야합니다. "<pan>" + value + "</span>"; }}, {field : 'hot', title : 'hot', width : 100, // field hot formatter : function (value, row, index) {if (value) {// hot 인 경우 값은 true이고 부울 변수 반환 "<input type = 'checkbox'cheecked = 'disabled ='true '"; // tick} else {return "<input type = 'checkbox'disable = 'true'"; //}}}, {field : 'ac // 로그인 이름이 비어 있지 않은 경우 로그인 이름을 표시} else {return "이 범주에는 관리자가 없습니다"; }}}]]}); }); </script> </head> <hod> <table id = "dg"> </table> </body> </html> 6. 테스트 결과 결과를 보여줍니다
마지막으로 다음과 같이 Datagrid의 디스플레이 결과를 테스트 해 봅시다.
이 시점에서 우리는 Struts2와 JSON을 성공적으로 통합했으며 이제 JSON 형식의 데이터를 전경으로 전송할 수 있습니다.
(참고 : 결국 전체 프로젝트의 소스 코드 다운로드를 제공 할 것입니다! 모두가 수집하거나 공유 할 수 있습니다).
원본 주소 : http://blog.csdn.net/eson_15/article/details/51332758
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.