2015년 1월 27일 화요일

개발자옵션이 노출되게 하는 방법, Android

 설정의 시스템에 있는 휴대전화 정보메뉴를 선택한다.

제일 하단에 보이는 빌드번호를 계속 터치하게 되면 개발자가 된다. -_-;

2015년 1월 23일 금요일

같은 이름으로 이미지를 변경할경우, JQuery

  // html
  

  // js
  // 일반적인 이미지 변경 할경우
  $('#banner').attr('src', '/image/bb.jpg');
 
  // 같은이름의 이미지로 변경할 경우
  $('#banner').attr('src', '/image/bb.jpg?param=123');

이미지를 변경하기 위해 동일한 이름으로 이미지를 교체하는 경우가 있는데, 캐싱문제로 인해 바로 변경되지 않는 경우가 있다.
위와같이 파라미터를 랜덤한 값으로 붙여 해결할수 있다.

선택된 텍스트값 얻기, JavaScript

var selection_text = document.selection.createRange().text;
alert(selection_text);

팝업창 옵션, JavaScript

function openPopup() {
  var url = '/popup.jsp';
  var option = 'width=100, height=100';
  window.open(url, '', option);
}
window popup option
width : 팝업창 가로사이즈 (px로 표시)
height : 팝업창 세로사이즈 (px로 표시)
top : 화면 상단에서 부터의 팝업창이 뜰 위치 (px로 표시)
left : 화면 왼쪽에서 부터의 팝업창이 뜰 위치 (px로 표시)
toolbar : 도구창 노출 여부 (yes or no로 표시)
menubar : 메뉴 노출 여부 (yes or no로 표시)
location : 메뉴 아이콘 노출 여부 (yes or no로 표시)
directories : 제목 표시줄 노출 여부 (yes or no로 표시)
status : 상태바 노출 여부 (yes or no로 표시)
scrollbars : 스크롤 사용여부 (yes or no로 표시)
resizable : 팝업창 사이즈 변경 가능 여부 (yes or no로 표시)

SpringSource Tool Suite 메뉴등록, Linux mint

STS를 다운받고 /opt 디렉토리로 이동시켜 압축을 해제한다.

sudo gedit /usr/share/applications/STS.desktop

[Desktop Entry]
Name=SpringSource Tool Suite
Comment=SpringSource Tool Suite
Exec=/opt/springsource/sts-3.6.1.RELEASE/STS
Icon=/opt/springsource/sts-3.6.1.RELEASE/icon.xpm
StartupNotify=true
Terminal=false
Type=Application
Categories=Development;IDE;java;

슈퍼키를 눌러 sts를 입력하면 등록된 메뉴를 확인할수 있다.

2015년 1월 22일 목요일

2015년 1월 21일 수요일

TextItem에 힌트(placeholder) 주기, SmartGWT

TextItem ti01 = new TextItem("name");
ti01.setHint("Hint"); // (1)
ti01.setShowHintInField(true); // (2)
(1) ti01.setHint("Hint"); 힌트를 주면 기본적으로 TextItem의 오른쪽에 힌트가 생긴다.
(2) ti01.setShowHintInField(true); 옵션을 주면 TextItem Field안쪽에 힌트가 보이고 focus 가 됐을때 힌트는 사라진다.

텍스트를 포함하는 ID나 Name을 LIKE방법으로 찾기, JQuery




 
// text가 들어가는 input을 모두 가져오자
$(':input[name*=text]').each(function(){
  console.log($(this).val());
});
 
// 결과값
1
2
3

merge update insert사용하기, Oracle

MERGE INTO MEMBER M
USING DUAL
        -- 업데이트를 할것인지 인서트를 할것인지의 조건
        ON (M.MEMBER_ID = ?)
WHEN MATCHED THEN
        -- 조건에 맞으면 업데이트
        UPDATE SET MEMBER_UPDATE = ?
WHEN NOT MATCHED THEN
        -- 조건에 맞지 않으면 인서트
        INSERT (
                MEMBER_ID
                , MEMBER_UPDATE
        ) VALUES (
                ?
                , ?
        )

데이터에 순위주기, Oracle

-- RANK
-- 순위를 정할때 같은값이 있을경우 같은 RANK값을 가지게 된다.
-- 다음 랭크는 중복된 값을 건너뛰게된다.
-- EX ) 1, 2, 2, 4, 4, 6
SELECT MEMBER_ID, MEMBER_NAME, MEMBER_GROUP_CODE
, RANK() OVER (ORDER BY MEMBER_SEQ DESC) AS RANK
FROM MEMBER
 
-- DENSE_RANK
-- 순위를 정할때 같은값이 있을경우 같은 RANK값을 가지게 된다.
-- 다음 랭크에 중복상관없이 순차적으로 넘버링된다.
-- EX ) 1, 2, 2, 3, 4, 4, 5
SELECT MEMBER_ID, MEMBER_NAME, MEMBER_GROUP_CODE
, RANK() OVER (ORDER BY MEMBER_SEQ DESC) AS RANK
FROM MEMBER
 
 
-- RANK GROUP
-- 그룹별로 순위를 부여한다
-- EX ) 1, 2, 3, 1, 2, 3
SELECT MEMBER_ID, MEMBER_NAME, MEMBER_GROUP_CODE
, RANK() OVER (PARTITION BY MEMBER_GROUP_CODE ORDER BY MEMBER_SEQ DESC) AS RANK
FROM MEMBER

2015년 1월 20일 화요일

TextItem style추가, SmartGWT

SmartGWT의 기본 css파일에 작성한 css를 추가해주도록 한다.

변경 스타일 예

.textItemBoxStyle,
.textItemBoxStyleFocused,
.textItemBoxStyleSelected,
.textItemBoxStyleSelectedFocused {
 /*background: url("./images/bullet_0.png") no-repeat scroll 5px center rgba(0, 0, 0, 0);*/
 /*padding-left: 17px;*/
 color: #494949;
 text-align: left;
}
 
.textItemBoxStyle,
.textItemBoxStyleFocused,
.textItemBoxStyleSelected,
.textItemBoxStyleSelectedFocused {
 font-family: Verdana, Arial, sans-serif;
 font-size: 12px;
 color:#494949;
 
 -o-text-overflow: ellipsis;
 text-overflow: ellipsis;
 
 -webkit-border-radius: 2px;
 -moz-border-radius: 2px;
 -ms-border-radius: 2px;
 -o-border-radius: 2px;
 border-radius: 2px;
 
 border: 1px solid #acacac;
 background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f7f7f7), color-stop(100%, #f2f2f2));
 background: -webkit-linear-gradient(top, #f7f7f7 0%, #f2f2f2 100%);
 background: -moz-linear-gradient(top, #f7f7f7 0%, #f2f2f2 100%);
 background: -o-linear-gradient(top, #f7f7f7 0%, #f2f2f2 100%);
 background: linear-gradient(top, #f7f7f7 0%, #f2f2f2 100%);
 
 
 /*height: 18px;*/
 /*line-height: 150%;*/
 padding: 0 2px 0 2px;
}
css를 추가해준후 TextItem의 스타일을 재정의 해준다.

TextItem ti01 = new TextItem("name");
ti01.setTextBoxStyle("textItemBoxStyle");

SelectItem에 한개이상의 Display Field 사용, SmartGWT

SelectItem은 기본적으로 한개의 Display값을 가진다.


SelectItem si01 = new SelectItem();
si01.setOptionDataSource("");
si01.setValueField("CD");
si01.setDisplayField("CD_NM");
 
// Display에 사용되는 필드로 이름, 라벨, 너비값
ListGridField si01Item01 = new ListGridField("CD", "Code", 100);
ListGridField si01Item01 = new ListGridField("CD_NM", Code Name");
 
si01.setPickListFields(si01Item01, si01Item02);  // 두개의 필드를 Display로 사용
si01.setPickListWidth(200);  // Display 너비
ListGridField를 SelectItem에 setPickListFields해줌으로써 여러개의 필드를 가질수 있다.

ListGrid의 edit모드에서 위에 작성한 SelectItem을 사용하고자 할때에는 아래와 같이 .setEditorProperties(SelectItem) 코드를 추가해준다.

ListGrid grid = new ListGrid();
// si01은 만들어 놓은 SelectItem
grid.setEditorProperties(si01);

SelectItem Criteria Change, SmartGWT

SelectItem si01 = new SelectItem();
si01.setOptionDataSource(ds);
si01.setOptionCriteria(new Criteria("group_id", "A");
si01.setValueField("CD");
si01.setDisplayField("CD_NM");

위와 같이 초기 세팅된 Criteria값을 변경해야 하는 경우가 필요하다.


si01.setOptionCriteria(new Criteria("group_id", "B");
다음과 같이 Criteria의 값을 변경하여도 서버에 전송되는 값은 'A'값이 넘어간다.


si01.getOptionCriteria().addCriteria(new Criteria("group_id", "B"));
다음과 같이 코드를 변경하여 사용하도록 한다.

2015년 1월 19일 월요일

SEVERE: A web application registered the JBDC driver, Exception

SEVERE: A web application registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

- ibatis설정 xml확인
- 추가된 항목에 대한 설정확인
- 서비스를 완전히 종료하였는지 확인

디바이스 Display정보얻어오기, Android

public Display getDisplayInfo(Context context){
 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
 Display display = wm.getDefaultDisplay();
 return display;
}

Display 사이즈 정보를 얻기 위한 방법

구글캘린더 이벤트 삭제, Android

private int DeleteCalendarEntry(int entryID) {
    int iNumRowsDeleted = 0;
 
    Uri eventsUri = Uri.parse(getCalendarUriBase()+"events");
    Uri eventUri = ContentUris.withAppendedId(eventsUri, entryID);
    iNumRowsDeleted = getContentResolver().delete(eventUri, null, null);
 
    Log.i(DEBUG_TAG, "Deleted " + iNumRowsDeleted + " calendar entry.");
 
    return iNumRowsDeleted;
}

참고 : http://stackoverflow.com/questions/6924438/how-to-delete-specific-event-in-calendar

설정파일 저장하기, Android

public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        SharedPreferences sp = getApplicationContext().getSharedPreferences("Str", mode);
        SharedPreferences.Editor editSp = sp.edit();
 
        editSp.putString("setting", "1");
}
//mode -  0  : 읽고쓰기
//MODE_WORLD_READABLE : 읽기공유
//MODE_WORLD_WRITEABLE : 쓰기공유

디바이스에 설치되어 있는 어플 찾기, Android

// 카카오톡이 설치되어 있는지 확인
@Override 
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try {
                this.getPackageManager().getPackageInfo("com.kakao.talk", PackageManager.GET_ACTIVITIES);
        } catch (NameNotFoundException e) {
                e.printStackTrace();
                ToastUtil.showShotToast(this, "없음");
        }
        ToastUtil.showShotToast(this, "있음");
}

하드웨어 버튼으로 뒤로가기, Android

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if(keyCode == KeyEvent.KEYCODE_BACK){
 
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }

Activity 클래스의 onKeyDown()을 오버라이드하여 사용.

구글블로그에 타사 서브도메인 사용방법

준비된 도메인은 www.springcome.net이고 hosting.kr에서 등록하였습니다.

blog.springcome.net으로 서브 도메인을 사용하여 블로그를 사용하고자 합니다.

먼저 구글블로그의 설정 -> 기본으로 이동합니다.
글발행 섹션에 보면 타사URL설정이 있습니다.

서브 도메인을 입력을 하고 저장을 누르게 되면 아래와 같이 CNAME2개가 표시 됩니다.

그럼 다음으로 hosting.kr의 서브도메인을 설정합니다.

보유도메인에 보면 네임서버 설정에 네임서버(서브도메인)설정관리를 선택하고 신청하기를 클릭합니다.

레코드 타입을 CNAME으로 선택하고 구글 블로그에 표시된 CNAME 두개를 입력해줍니다.

시간이 조금 걸릴수 있는 작업입니다. 한시간정도 여유를 두시고 다시 구글 블로그의 타사 도메인 설정에 blog.springcome.net을 입력후 저장합니다.
정상적으로 완료된 모습니다.

작업이 완료되면 blog.springcome.net으로 바로 연될되는걸 확인할수 있습니다.

2015년 1월 16일 금요일

JQuery, JSON 배열에 데이터 넣기

var jsonArr = {
  "info": [
    { "name":"aaa" },
    { "name":"bbb" },
    { "name":"ccc" }
  ]
};

다음과 같은 형식의 데이터를 만들고자 할때 아래와 같이 사용함.


var jsonArr = {'info':[]};
$(':input[name=info]').each(function(){
    jsonArr.info.push({
        'name':$(this).val()
    });
});

Class에서 목록형태로 받는 방법


//BeanClass(Member.class)
private JSONObject json;
 
//ControllerClass
JSONArray jArray 
  = memberBean.getJson().getJSONArray("json");
List jsonBean 
  = (List) jArray.toCollection(jArray, JsonBean.class);

Exception, ORA-00918 : 열의 정의가 애매합니다.

Cause:java.sql.SQLSyntaxErrorException:ORA-00918:열의 정의가 애매합니다.

두개 이상의 테이블을 조인하여 사용할때 발생.

조인되는 테이블컬럼에 같은 컬럼의 이름이 존재할경우 alias를 붙여 어떤 테이블의 컬럼인지 알려주어야 한다.


SELECT A.MBR_ID, B.MBR_ID
FROM MEMBER A
  INNER JOIN MEMBER B ON A.MBR_ID = B.MBR_ID

2015년 1월 15일 목요일

Convert String to Calendar

String date = "20150115";

SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");

Calendar cal = Calendar.getInstance();
cal.setTime(df.parse(date));

JavaScript, Array.some(), Array.every()

 Array.every(callbackfn: (value: T, index: number, array: T[]) => unknow, thisArg?: any): boolean      const   array  = [ 'A' ,  ...