1. 오류 및 문제점
1. 헤더에서 선택한 기업 정보 세션에 저장
- 문제점: 헤더에서 기업을 선택하면 세션에 저장 후 해당 기업의 정보로 새로고침 되어야 한다.
- 해결 방안: 드롭다운이 변경되면 ajax를 통해 서버에 기업 id를 parameter를 전달한다. 전달된 parameter를 각 controller에서 세션에 저장한다.
2. 조회 기업 변경 Ajax
- 문제점: 조회 기업 변경 후 선택한 기업에 대한 정보를 parameter로 전달하기 때문에 이전의 일반 get 방식을 사용할 수 없다.
- 해결 방안: 선택한 기업 정보는 session에 저장되기 때문에 get 요청 주소 뒤에 session에서 불러온 parameter를 추가한다.
HttpSession session = request.getSession();
int comId = (int) session.getAttribute("comId");
String comName = (String) session.getAttribute("comName");
return "redirect:/company/companyList.do?comId=" + comId + "&comName=" + comName;
진행 상황
1. 헤더에서 선택한 기업 정보 세션에 저장
- a 태그에서 data-OO 속성으로 company_id를 전달한다.
- 특정 a 클래스를 눌렀을 때 ajax로 동일 path에 parameter를 전달한다.
- 각 controller에서는 세션의 값을 변경하는 코드가 있어야 한다.
- nav를 선택한 경우 parameter가 존재하지 않는다. 하지만 로그인 시 세션에 기업 값을 저장하기 때문에 세션에서 불러온 값을 parameter로 전달한다.
<li class="nav-item no-arrow dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" id="dropdownMenuLink"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" >
<i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>
<span class="mr-2 d-none d-lg-inline text-gray-600 small">조회 기업 변경</span>
</a>
<div id="select-box" class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink">
<div class="dropdown-header">기업 목록</div>
<c:forEach items="${lookUpList}" var="look" varStatus="status">
<a class="dropdown-item" data-company="${look.company_id}">${look.company_name}</a>
</c:forEach>
</div>
</li>
<script>
$(".dropdown-item").on("click", function () {
var comId = $(this).attr("data-company");
var url = $(location).attr("pathname") + "?comID=" + comId;
$.ajax({
url: $(location).attr("pathname"),
data: {"comID":comId},
success: function (result) {
$(location).attr("href", url);
},
error: function(message) {
alert(message);
}
});
});
</script>
<li class="nav-item ">
<a class="nav-link" href="../product/productList.do?comID=${comID}">
<i class="fas fa-fw fa-briefcase"></i>
<span>상품관리</span>
</a>
</li>
public class ProductListController implements CommonInterface {
@Override
public String execute(Map<String, Object> data) throws Exception {
HttpServletRequest request = (HttpServletRequest) data.get("request");
HttpSession session = request.getSession();
int comID = Integer.parseInt(request.getParameter("comID"));
session.setAttribute("comID", comID);
ProductService service = new ProductService();
List<ProductVO> companyList = service.productList(comID);
request.setAttribute("productList", companyList);
return "/product/product_list.jsp";
}
}
참고 자료