xrp_coil

2012년 6월 1일 금요일

javascript 정규식 이용한 금액 콤마로 나누기

어디선가 퍼온 소스기는 하지만. 상당히 유용한.. ㅎ.


function commify(n){
 var reg = /(^[+-]?\d+)(\d{3})/;   // 정규식
 n += '';  // 숫자를 문자열로 변환

 while (reg.test(n))
  n = n.replace(reg, '$1' + ',' + '$2');

 return n;
}


jstl ${param} 동적으로 구현해보기.

jstl을 사용하면서 여태 동적으로 구현 할 일이 없었는데 ....

이번건 동적이라기보다 변수하나만을 할당해서 가져오는것이지만.

이 방법으로 동적구현까지도 충분히 될듯하다.

1. 목적 :
  - 세션을 가져올 때 세션명을 properties 또는 Constants 에서 지정한 명으로 받아오게 하기.





1-1. 일반적인 방법 :

 - java
 세션명을 직접 입력하여 저장한다.

HttpSession session = request.getSession();
session.setAttribute("SESSION_USER", userInfo);



 - jsp
위에서 입력한 세션명으로 바로 가져온다.

${sessionScope.SESSION_USER.name}





1-2. 세션명을 선언후 사용 :

 - Constants.java
  공통으로 사용할 세션명을 정한다.

public final class Constants {

 public static final String USER_SESSION_KEY = "_S_USER_KEY_";   //유저 세션 KEY

}



 - java
  Constants에 지정된 세션키로 세션을 저장한다.

HttpSession session = request.getSession();
session.setAttribute(Constants._S_USER_KEY_, userInfo);



 - jsp
  Constants를 import 하고 세션키를 변수에 담는다. 그리고 변수에 담겨있는 세션키명으로 세션을 가져온다.
  ( 대괄호 안에 있다고 배열로 착각한 내가 좀 챙피함. -_-;;)

2012년 5월 30일 수요일

스프링(spring) 3.0 Annotation 파일 다운로드(File Download) 구현하기.


그냥 파일다운로드는 다른 사람들의 포스팅에도 있어서 금방했는데...

프로퍼티에서 가져와서 구현을 하려고 했더니 클래스패스를 잡지 못해서

request.getClass().getResource("/").getPath() 를 사용하면 이상하게 자꾸 톰캣 라이브러리 쪽으로 패스를 가져온다.

그래서 바꾼것이 currentThread에서 클래스로더를 가져오고 거기에서 getResource로 프로퍼티의 위치를 가져오는식으로 바꿈. 그래도 이렇게 해서 되니까~ 다행~ .

그것때문에 좀 더 시간이 걸렸슴.


우선 첫번째로 해야할 부분. 파일다운로드용 ViewResolver를 선언.

- dispatcher-servlet.xml




두번째로, Controller 구현. 일반적으로 공통 controller를 만들고 bean으로 만드는데 저는 그냥 업무마다 각각의 controller에서 구현했슴. 원래 properties에서 가지고 오는 부분은 공통클래스로 되어있으나 포스팅을 위해 잠시...
- templeteFileController.java






세번째로. 파일다운로드 뷰 bean으로 넘긴 후, 처리해야할 로직 구현.
- FileDownloadView.java





네번째로 jsp에서 필요 파라메터를 넘긴 후, 다운로드 테스트.
- test.jsp





* 참고 프로퍼티 파일은 아래와 같습니다. 경로는 src 바로 아래에 있구요.
- test.properties





다운로드 부분은 얼마전 작성한 아래 포스팅을 참고하시면 됩니다.

ajax로 파일다운로드 구현.
http://leinger.blogspot.com/2012/05/ajax.html


다른 세팅에 비해 비교적 간단하게 보이기는 하지만. 이것도 몇 시간에 걸쳐서 한... 나는..

역시.. 배울게 많은 프로그래머이다...ㅠ_ㅠ


======================================
2012-05-31 내용추가

로컬서버에서 잘 돌아가던 다운로드가 linux서버로 올리고나니 돌아가지 않는다. 원인을 찾아보니.

local서버에서 돌릴때 controller의 properties 파일을 가져오는 부분에서 url은


url.toString()::::::file:/D:/project/Java/.metadata/.plugins/org.eclipse.wst.server.core/tmp3/wtpwebapps/Test/WEB-INF/classes/test.properties
url.toString().substring()::::::D:/project/Java/.metadata/.plugins/org.eclipse.wst.server.core/tmp3/wtpwebapps/Test/WEB-INF/classes/test.properties

테스트서버에서 url은


url.toString()::::::file:/usr/local/tomcat7.0.23/webapps/ROOT/Test/WEB-INF/classes/test.properties
url.toString().substring()::::::usr/local/tomcat7.0.23/webapps/ROOT/test/WEB-INF/classes/test.properties

즉. 절대경로이기 때문에 local서버에서는 substring 6자리가 맞지만. linux서버에서는 substring 5자리로 변경해 주어야 한다. 

편하게 만들려고 했는데.. 점점 불편해지고 있는...ㅠㅠ os체크라도 해야하나..ㅠㅠ


결론...;;; 아래 로직 추가.




int substrStartAt = 0;
      String osName = System.getProperty("os.name").toLowerCase();
      if(osName.indexOf("win")>=0){
       substrStartAt = 6;
      }else if(osName.indexOf("mac")>=0){
       substrStartAt = 5;
      }else if(osName.indexOf("nix")>=0 || osName.indexOf("nux")>=0){
       substrStartAt = 5;
      }else if(osName.indexOf("sunos")>=0){
       substrStartAt = 5;
      }