쇼핑 카트에는 두 가지 나머지 문제, 즉 계단식 주문 정보 및 페이지 캐시 스토리지가 있습니다. 여기의 정보는 쇼핑 카트 및 쇼핑 품목을 나타냅니다. 즉, 쇼핑 카트의 정보를 데이터베이스에 저장하면 각 쇼핑 품목의 정보를 저장하고 외국 키는 관련되어 있으며, 여기에는 계단식 스토리지 문제가 포함됩니다. 페이지 캐시 문제는 사용자가 주문을 확인하는 시간을 말하면, 다시 클릭하면 주문 확인 페이지로 돌아갑니다. 주문 확인 페이지가 이제 다시 나오고 세션은 여전히 존재하며 정보는 여전히 정보입니다. 이것은 분명히 우리가 원하는 결과가 아니며, 나중에 하나씩 분석 할 것입니다. 이 섹션에서는 주로 주문 정보의 계단식 인벤토리 및 페이지 캐싱에 대해 설명합니다.
1. 주문 정보의 계단식 저장
최대 절전 모드에서 두 개의 관련 테이블의 계단식 저장소를 구성해야합니다. 여기서 우리는 주로 주석의 구성 방법을 소개합니다. 주문의 포조는 포더이고, 쇼핑 아이템의 포조는 소더이며, Forder와 Sorder는 일대일 관계입니다. 먼저 다음과 같이 주석 구성을 설정하겠습니다.
@Entity Public Class Forder는 Java.io.serializable을 구현합니다. {// 관련없는 코드를 생략합니다 ... 개인 목록 <Sorder> soorders = new ArrayList <Sorder> (); @onetomany (cascade = cascadetype.all, fetch = fetchtype.lazy, mappedby = "forppedby ="forpedby = ") 공개 목록 <Sorder> getsorders () {return this.sorders; } public void setSorders (list <Sorder> soorders) {this.sorders = soorders; }} @entity public class Sorder는 Java.io.serializable을 구현합니다. {// 관련없는 코드를 생략합니다 ... 개인 포더 포더; @manytoone (fetch = fetchtype.lazy) @joincolumn (name = "fid") public forder getforder () {return this.forder; } public void setforder (Forder Forder) {this.forder = forder; }} 이 구성 후 라인 항목을 저장하면 쇼핑 품목을 저장하고 자동으로 외국 키를 연관시킵니다. 그러나 전제는 우리가 그들 사이의 관계를 설정해야한다는 것입니다.
이전에 쇼핑 아이템을 쇼핑 카트에 추가했을 때 Forder.Setsorder (SORDER)가 실행되었습니다. 이제 Forder를 Soorder에 추가해야하므로 다음과 같이 원래 코드에 추가해야합니다.
// 이것은 섹션 17의 코드입니다. 우리는 Middle @Service ( "sorderService")에 문장을 삽입합니다 ( "sorderService") public class sorderServiceimpl은 baseServiceimpl <Sorder> 구현 sorderService {@override public forder addsorder (forder forder, product) {boolean ishave = false; // 중복 쇼핑 아이템이 있는지 여부를 표시하는 데 사용됩니다. // 현재 쇼핑 아이템 Sorder Soorder = ProductTosorder (제품); // 현재 쇼핑 품목이 복제되었는지 판단합니다. 복제 된 경우 (Sorder Old : Forder.getSorders ())) {if (Old.getProduct (). getId (). equals (sorder.getProduct (). getId ()) {// Shopping old.setNumber (old.setNumber () + soorder () + soorder.getnumber ()를 추가하십시오. ishave = true; 부서지다; }} // 현재 쇼핑 항목은 쇼핑 카트에 존재하지 않습니다. if (! ishave) {// 여기에 문장을 삽입합니다. // 쇼핑 아이템을 쇼핑 아이템에 추가하기 전에 먼저 쇼핑 아이템과 쇼핑 카트 사이의 연관성을 설정하지만,이 시간에 창고에 들어가서 창고에 들어가서 창고 아이템에 들어갑니다. 당시 기본 키 SOORDER.SETFORDER (Forder)가 있습니다. forder.getSorders (). add (소더); } 리턴 포더; } @override public Sorder ProductTosorder (제품 제품) {Sorder Soorder = New Sorder (); soorder.setName (product.getName ()); Soorder.SetNumber (1); soorder.setPrice (product.getPrice ()); Soorder.SetProduct (제품); 리턴 소더; }}좋아, 주문이 확인할 때 어떤 조치를 취할 것인지 살펴 보겠습니다.
그래서 우리는 재발점에서 논리를 완성하기 위해갑니다.
@Controller ( "ForderAction") @Scope ( "프로토 타입") public class forderaction은 Baseection <Forder> {@override public forder getModel () {model = (forder) session.get ( "forder"); 리턴 모델; } // 쇼핑 카트 (주문) 및 쇼핑 아이템 (라인 항목)의 계단식 스토리지 기능을 구현 공개 문자열 save () {// // 세션의 쇼핑 아이템을 현재 모델 개체에 전달 // forder forder = (forder) session.get ( "forder"); // //model.setSorders (forder.getSorders ()); //forder.setAddress (model.getAddress ()); //forder.setName (model.getName ()); //forder.setphone (model.getphone ()); //forder.setRemark (model.getRemark ()); //forder.setUser((user)session.get("user "); //forder.setstatus(New Status (1)); //forder.setPost (model.getPost ()); //forder.setPost (model.getPost ()); //forder.setUser((user)session.get("user "); //forder.setstatus(New Status (1)); //forder.setPost (model.getPost ()); // Cascaded Library (XML 또는 Pojo의 주석에 구성되어야 함), Soorder Association Forder가 필요합니다. //forderservice.save(forder); model.setuser ((사용자) 세션 .get ( "사용자")); model.setstatus (새 상태 (1)); Forderservice.save (모델); "은행"반품; }} 위의 코드에서 볼 수 있듯이 두 가지 방법이 있습니다. 첫 번째는 GetModel 메소드 (내가 댓글을 달린 부분)를 재정의하지 않습니다. 이 방법은 꽤 바보입니다. Forderaction은 Baseection을 상속하고 Baseection은 ModelDriven 인터페이스를 구현하기 때문에 전달 된 데이터가 모델에 캡슐화됩니다. 모델은 Baseection의 속성입니다. 그런 다음 세션에서 모델의 모든 정보를 Forder에 전달해야하며, Forder의 데이터는 Sorder와 계단식으로 들어가서 라이브러리에 들어갈 수 있습니다. 그러나이 방법은 약간 어리석은 일입니다. 그래서 우리는 두 번째 방법을 사용하고 GetModel 메소드를 다시 작성한 다음 Forder를 모델에 직접 할당 한 다음 모델에 계단식 항목, 즉 위의 발표되지 않은 코드를 추가하면됩니다. 이러한 방식으로 사용자가 클릭하여 주문을 확인하면 정보가 데이터베이스에 입력되어 결제 페이지로 이동합니다 (지불 페이지는 다음에 수행해야하므로 먼저 JSP로 점프 할 수 있습니다).
2. 페이지 캐싱 문제
이제 주문 정보의 계단식 입력이 해결되었지만 사용자가 주문을 확인한 다음 다시 확인하면 여전히 원래 주문 확인 페이지이며 정보가 여전히 정보가 여전히 닫히지 않았으므로 세션이 닫히지 않으므로 주문 정보를 다시 확인해야합니다. 다시 말해, 사용자가 클릭하여 주문을 확인하면 페이지 캐시를 허용 할 수 없습니다. 이런 식으로 사용자가 뒤로 클릭하면 페이지가 만료되었음을 보여주고 홈페이지로 점프 할 수 있습니다.
브라우저가 데이터를 캐시하지 않도록 프론트 엔드 JSP 페이지를 설정할 수 있으므로 프론트 엔드 확인에서 다음과 같이 설정할 수 있습니다.
그러나 문제는 그렇게 간단하지 않습니다. 이렇게하는 것은 불가능합니다. 이렇게하면 사용자가 클릭하여 페이지가 만료되도록 프롬프트합니다. 그러나 사용자가 새로 고침되고 불가능하면 캐시에는 원래 데이터가로드됩니다. 그래서 우리는 한 가지를 이해합니다. 세션은 아직 닫히지 않았으므로 세션에 Forder에 대한 주문 정보가 있습니다. 사용자는 새로 고침 후 계속 해서이 포더를 얻을 수 있으며 원래 주문 정보가 표시됩니다. 따라서 이것을 프론트 데스크에서 설정하면 문제가 전혀 해결 될 수 없습니다. 또한 백그라운드에서 관련 처리를 수행해야합니다.
우리는 문제를 알고 있으므로이를 수행 할 수 있습니다. 사용자가 주문을 확인하기 위해 클릭하면 주문을 처리 한 다음 재산이 처리되면 결제 페이지로 이동합니다. 우리는 선발에서 몇 가지 트릭을 할 수 있습니다. 세션에서 원래 포더를 지우십시오. 괜찮지 않습니까? 이것은 가능하지만, 나중에 지불 할 때 주문이 여전히 주문과 관련이 있다는 것을 고려할 때, 우리는 세션에서 원래 Forder를 다른 장소로 저장 한 다음 원래 Forder를 제거 할 수 있습니다. 따라서 다음과 같이 위의 양식에 두 줄의 코드를 추가합니다.
@Controller ( "ForderAction") @Scope ( "프로토 타입") public class forderaction은 Baseection <Forder> {@override public forder getModel () {model = (forder) session.get ( "forder"); 리턴 모델; } // 쇼핑 카트 (주문) 및 쇼핑 아이템 (라인 항목)의 계단식 스토리지 기능을 구현 공개 문자열 save () {// // 세션의 쇼핑 아이템을 현재 모델 개체에 전달 // forder forder = (forder) session.get ( "forder"); // //model.setSorders (forder.getSorders ()); //forder.setAddress (model.getAddress ()); //forder.setName (model.getName ()); //forder.setphone (model.getphone ()); //forder.setRemark (model.getRemark ()); //forder.setUser((user)session.get("user "); //forder.setstatus(New Status (1)); //forder.setPost (model.getPost ()); //forder.setPost (model.getPost ()); //forder.setUser((user)session.get("user "); //forder.setstatus(New Status (1)); //forder.setPost (model.getPost ()); // Cascaded Storage (XML 또는 Pojo의 주석에 구성되어야 함) 따라서 Soorder는 Forder와 관련되어 있습니다. // // Sorderserviceimpl class.save (Forder)에 추가하십시오. //forderservice.save(forder); model.setuser ((사용자) 세션 .get ( "사용자")); model.setstatus (새 상태 (1)); Forderservice.save (모델); // 쇼핑 카트는 스토리지에 저장되었으므로 원래 세션의 쇼핑 카트는 세션을 지우게되어야합니다. }}그런 다음 마무리하기 전에 프론트 데스크의 주문 페이지를 확인하기 위해 다음 코드를 추가해야합니다.
이제 논리가 분명합니다. 첫째, 주문 확인 페이지가있을 때 Forder에는 데이터가 있으므로 비어 있지 않습니다. 이 판단은 무효입니다. 사용자가 순서를 확인하기 위해 클릭하면 포더를 비어있는 포더 객체로 교체합니다. 즉, 원래 데이터가 사라 졌음을 의미합니다 (나중에 지불을 위해 세션에서 다른 키 값 쌍에 저장). 이런 식으로, 사용자가 다시 클릭하여 지금 주문 확인 페이지로 돌아 오면 판단이 발효되어 홈페이지로 이동합니다. 이 시점에서 전체 논리가 완료되고 페이지 캐시 문제가 해결됩니다.
원본 주소 : http://blog.csdn.net/eson_15/article/details/51433247
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.