Sitemesh 사용하기 위해 @Bean 메소드를 추가
@Bean
public FilterRegistrationBean<SitemeshConfig> sitemeshbean()
{
FilterRegistrationBean<SitemeshConfig> bean = new FilterRegistrationBean<SitemeshConfig>();
bean.setFilter(new SitemeshConfig());
return bean;
}
SitemeshConfig 설정 class파일을 생성
public class SitemeshConfig extends ConfigurableSiteMeshFilter {
@Override
protected void applyCustomConfiguration(SiteMeshFilterBuilder builder)
{
// 설정관련내용 >> default.jsp , exclude
// 적용시킬파일, 해당 파일의 경로
builder.addDecoratorPath("/*", "/views/common/default.jsp"); // DecoratorPath는 jsp 관련
builder.addDecoratorPath("/login/*", "/views/common/default2.jsp");
builder.addExcludedPath("/login/my*");
}
}
login_ok 요청시 count를 사용해도 되지만 database에 두번 접근 해야 하기 때문에
아래처럼 처리하면 한번만 접근하고 처리할수있음
controller.java 부분
@Override
public String login_ok(MemberVo mvo,HttpSession session) {
MemberVo mvo2 = mapper.login_ok(mvo);
if(mvo2 != null)
{
session.setAttribute("mvo", mvo2);
return "/main/main";
}
else
{
return "redirect:/member/login";
}
}
.xml 부분
<select id="login_ok" resultType="com.example.demo.vo.MemberVo">
select sawon,name,level from member
where userid=#{userid} and pwd=#{pwd}
</select>
사원등록 member_input.jsp
select 쿼리문을 활용해서 depart table에 들어있는 부서의 code와 name을 가져와서
반복문을 통해 출력해주기
<section>
<div id="mformm">
<form method="post" action="member_input_ok">
<div class="member"> <input type="text" name="userid" placeholder="아이디"> </div>
<div class="member"> <input type="text" name="name" placeholder="이 름"> </div>
<div class="member"> <input type="password" name="pwd" placeholder="비밀번호"> </div>
<div class="member"> <input type="text" name="sawon" placeholder="사원번호"> </div>
<div class="member">
<select name="depart">
<option> 부서선택 </option>
<c:forEach items="${list}" var="dvo">
<option value="${dvo.code}"> ${dvo.name} </option>
</c:forEach>
</select>
</div>
<div class="member">
<select name="level">
<option> 선택 </option>
<option value="80"> 상급관리자 </option>
<option value="60"> 중급관리자 </option>
<option value="40"> 하급관리자 </option>
<option value="20"> 평직원 </option>
</select>
</div>
<div class="member"> <input type="submit" value="사원등록"> </div>
</form>
</div>
</section>
member_input 구현클래스
@Override
public String member_input(Model model) {
// 부서정보를 전달
ArrayList<DepartVo> list = mapper.getDepart();
model.addAttribute("list",list);
// 사원번호를 mapper를 통해 생성하여 전달
int num = mapper.getSawon();
String code = "c"+String.format("%03d", num); << 앞에 c를 붙여주고 자릿수 맞추는 코드
model.addAttribute("code",code);
return "/member/member_input";
}
출퇴근 구현클래스 처리
@Override
public String mypage(HttpSession session,Model model) {
// 회원정보
String sawon = session.getAttribute("sawon").toString();
MemberVo mvo = mapper.mypage(sawon);
model.addAttribute("mvo",mvo);
model.addAttribute("depart",mapper.getDepartName(mvo.getDepart()));
// 출퇴근 출력
LocalDate today = LocalDate.now();
CommuteVo cvo = mapper.getCommute(sawon,today.toString());
int chk;
if(cvo==null)
{
// 출근 안함.
chk=1;
}
else if(cvo.getTowork()!=null && cvo.getTohome()==null)
{ // 출근이 저장됐다.
chk=2;
}
else
{ // 출,퇴근이 전부 DB에 저장됐다.
chk=3;
}
model.addAttribute("chk",chk);
// 사원간 쪽지
return "/member/mypage";
}
@Override
public String towork(HttpSession session) {
String sawon = session.getAttribute("sawon").toString();
String today = LocalDate.now().toString();
mapper.towork(sawon,today);
return "redirect:/member/mypage";
}
@Override
public String tohome(HttpSession session) {
String sawon = session.getAttribute("sawon").toString();
String today = LocalDate.now().toString();
mapper.tohome(sawon,today);
return "redirect:/member/mypage";
}
출퇴근 관련 xml 쿼리문
commute table안에 값을 확인하여 jsp 파일에 출력하는걸 바꿔 주는 용도
<select id="getCommute" resultType="com.example.demo.vo.CommuteVo">
select *from commute where sawon=#{param1} and writeday=#{param2}
</select>
출근
<insert id="towork">
insert into commute (towork,writeday,sawon)
values(curtime(),#{param2},#{param1})
</insert>
퇴근 << 이미 DB에 들어있는 값중 비어있는 tohome에 값을 넣어줘야되는거기 때문에 업데이트다
<update id="tohome">
update commute set tohome=curtime()
where writeday=#{param2} and sawon=#{param1}
</update>