SpringFramework/Board게시판

새로 생성한 게시물 제목에 new 마크 붙히기

유혁스쿨 2020. 9. 8. 00:40
728x90
반응형

우선 게시물이 등록된 시간을 판단하기 위해서는 reg_date라는 컬럼을 읽어야합니다.
사용자가 게시물 목록요청을 했을 때 DB로부터 읽어들인 목록 안에 들어있는 reg_date 컬럼을 읽습니다.
읽힌 reg_date 컬럼의 값과 현재시간을 읽은 후 둘의 차이를봐서 만약 그게 하루 미만이면 new마크를 붙히는 증표를남기고 3일 이내의 게시물에 처리한다면 3일 미만인지 시간차를 봐서 지정한 기간 내의 게시글이라면  new마크를 붙힐 수 있는 논리적 증거를 vo에 처리하고 화면쪽에서 그 증표를 보고 html로 new를 만들 지 안만들지를 구현합니다.

 
BoardVO에 newMark 필드 추가

public class BoardVO {
    private Integer boardNo;
	private String title;
	private String content;
	private String writer;
	private Integer viewCnt;

        /* 이하 set get메서드 생략 */
//////////////////////////////////////////////////////////////////////////////////////
	/*new 마크 로직에 필요한 필드*/
	private Date regDate;
	private boolean newMark;
    
	public boolean isNewMark() {
		return newMark;
	}
	public void setNewMark(boolean newMark) {
		this.newMark = newMark;
	}
}

 

 

Service에서 추가 로직을 구현합니다.

    @Override
    public List<BoardVO> getArticleList(SearchVO search) {
        List<BoardVO> list= mapper.getArticleList(search);
        /* 이곳에 new 마크 추가 로직 구현 */
        return list;
        }
    }

 List를 불러올때 List<Board>VO list = mapper.getArticleList(search); 라인이 실행되면

값을 불러온 상태이므로 그 아래 return을 해주기 전에 추가 작업에 대한 로직을 구현해줍니다.

 

 

 

@Override
    public List<BoardVO> getArticleList(SearchVO search) {
        List<BoardVO> list= mapper.getArticleList(search);
        for(BoardVO article : list) {
            long now = System.currentTimeMillis();
            Date regDate = article.getRegDate();
            //long regTime = regDate.getTime();
            long regTime = article.getRegDate().getTime();
            if(now - regTime < 60*60*24*3*1000) {
                article.setNewMark(true);
            }
        }
        return list; 
    }

로직을 추가합니다.

 

List<BoardVO> list= mapper.getArticleList(search);

DB로부터 게시글정보 목록을 불러와서 컨트롤러에게 그 정보를 보내기 전에 시간판단을 해서 newMark에대한 설정을 만들어 놓고 컨트롤러에게 보냅니다.

 

 

 

 

1일 이내 신규글 newMark처리로직

 

for(BoardVO article : list) { 

게시글에서 신규글인지를 하나씩 반복해서 파악 합니다.

 

 

현재 시간 읽어오기

long now = System.currentTimeMillis();

밀리초로 읽어들임(15억...*1000초) / currentTimeMillis()메서드는 반환타입이 long입니다.

 

Date regDate = article.getRegDate();

우선 article로부터 DB에 저장된 시간을 불러옵니다 이때 VO에 선언된 regDate는 date타입이며 날짜 객체형 입니다.

현재시간과  저장된 시간 둘중 하나를 같은 타입으로 맞춰줍니다.

long regTime = regDate.getTime();

getTime();메서드는 date클래스에서 제공하는 메서드 이며 1970년부터 현재시간까지의 시간으로 날짜데이터를 밀리초로 리턴해줍니다.

 

long regTime = article.getRegDate().getTime(); 

두 코드라인을 합쳐서 작성합니다.

 

if(now - regTime < 60*60*24*1000) {

 

60* 60* 24*1000은  3 1일 을 밀리초로 환산한 값입니다.

1일 : 60 * 60 * 24 *1000 

3일 : 60 * 60 * 24 * 3 * 1000 
3달 : 60 * 60 * 24 * 90 * 1000 

각각 이렇게 구할수 있겠습니다. 

 

즉, 현재시간에서 게시글이저장된 시간을 뺏을때 1일보다 작다면 등록한지 1일 미만이므로 

article.setNewMark(true);

1일이내에 게시글이 등록되었다는 기준에 부합하므로 마크를 붙혀야 하며

VO 필드의 newMark를 트루로 초기화합니다. 

return list;

 

이제 컨트롤러에게 이 new마크 처리가 완료된 객체를 보내면 컨트롤러가 그것을list.jsp에보내게 됩니다.

list.jsp 화면에서 받은 list객체의 newMark가 true이면 new마크를 붙히게 하고 false이면 출력하지 않도록 코드합니다.

 

list.jsp

<c:if test="${b.newMark}">
<span class="label label-red">new</span>
</c:if>

<c:if >문을 사용하는데 이때 조건식이 ${article.newMark == true} 라고 궂이 할 필요가 없습니다.

false이면 null이 되므로 el자체적으로 인식이 되지 않기 때문입니다.

이제 new마크는 if 조건식이 true일때 지정된 부트스트랩 클래스를 사용하여 표시하게 됩니다

 

728x90
반응형