오류 내용 노트북을 바꾸게 되어서 새로 환경세팅 하면서 프로젝트 받아왔더니 오류가 한 바가지 나왔다 😢 해당 오류는 org.w3c.dom.Node 버전 충돌로 인해 발생한 오류이다.클래스 로딩 시 다른 버전의 Node가 우선 로드되면서 getTextContent() 메서드를 찾을 수 없어 발생되는 오류인 것이다. 해결 방법Java Build Path 에서 JRE System Library의 우선순위를 최상단으로 옮겨주면 된다. 1) 프로젝트 우클릭 -> Properties 2) Java Build Path 메뉴에서 Order and Export 탭 선택 3) JRE System Libray 선택하여 우측의 Top을 눌러 맨 위로 옮겨준 뒤 Apply 한다. 해결~~~ !
까먹을까봐 쓰는 넥사크로 기본 설정 상단 메뉴 Tool - Options... 클릭 1. Project - General - Base Library Path 이클립스 worksapce 경로의 src - main - 프로젝트 경로 - nexacro17lib 2. Project - Generate - Generate Path이클립스 webapp 하위의 프로젝트 경로넥사크로에서 작성한 xml 파일이 js로 변환되어 저장되는 경로 3. Environment - General - Working Folder이클립스 workspace 경로의 src - main - wabapp 하위의 프로젝트 경로
WITH절 WITH절이란?서브쿼리에 이름을 붙여 만든 임시 테이블이다.SQL문을 작성하다 보면 서브쿼리가 반복적으로 사용되는 경우가 있는데 이러한 경우는 쿼리가 복잡해지고 유지보수도 어려워지게 된다. 이러한 단점을 해결하기 위해 WITH절을 사용해 서브쿼리에 이름을 붙여 사용할 수 있다.VIEW와 비슷해 보이지만 VIEW의 경우는 DROP 전까지 사라지지 않고 다른 쿼리에서도 재사용이 가능하지만WITH의 경우에는 실행되는 쿼리문 안에 작성되어 있어서 해당 쿼리에서만 사용이 가능하다는 특징이 있다! 기본 문법WITH 임시테이블명 AS ( 사용할 서브쿼리)SELECT 컬럼1, 컬럼2, ... FROM 임시테이블명 WITH절에 '임시테이블명' 으로 이름을 붙여 SELECT 절에서 해당 테이블을 참조해 쿼리를..
이클립스 SVN 연결 오늘은 이클립스에 설치한 svn을 이용해 코드를 가져와보자! ▼ 이클립스 SVN 설치https://cottoncandysom.tistory.com/196 1) 먼저 이클립스 상단의 Window 메뉴 클릭 -> Show View -> Other 선택 2) SVN Repositories - Open 3) 방식은 2가지인데, - 1 : 빈 공간 우클릭 -> Repository Location 클릭 - 2 : 상단 아이콘 클릭 4) URL에 프로젝트 URL을 입력하고, Browse 버튼을 눌러서 유효한 URL인지 확인한다.그리고 User ID와 PW를 입력하고 Finish 5) 그럼 SVN Repositories 탭에서 프로젝트를 확인해 볼 수 있다! SVN 소스 로컬로 다운..
데이터 객체를 이용한 통신 실제 데이터를 가져와서 가져온 데이터를 화면에 적용하는 통신 방법에 대해 알아보자! 먼저 Outline 탭 하위의 Head 탭을 클릭하면 Submission이 보인다.Submission을 우클릭 -> Submission 추가를 선택! 그럼 아래와 같은 창이 뜨는데,ID : 고유 ID를 의미한다.그리고 submission에서 제일 중요한 부분은그 아래에 있는 Reference / Target / URL Action 이다! Reference : Request 정보. 이미 만들어진 데이터 객체 중 하나를 선택해서 지정!Target : Response에 해당. 직접 입력하는 것이 아니라 실제로 내가 사용할 데이터 객체를만들어서 지정해 주는 것!URL Action : 내가 직접 데..
1) 이클립스 상단 메뉴 Help -> Eclipse Marketplace... 선택 2) svn 검색해서 나오는 Subversive - SVN Team Provider >> Install 3) 전체 선택 4) Confirm 5) Finish 6) 설치가 완료되면 Restart Now를 눌러 재실행한다. 그리고 여기서 또!SVN Connector를 깔아줘야 한다고 함 1) 이클립스 상단 메뉴 Window -> Preferences 선택 2) SVN에서 -> SVN Connector 탭 선택 -> Get Connectors... 선택 근데?오류가 나버림(っ °Д °;)っ Connector discovery completed without finding any connectors. Pl..
회사에서 프로젝트를 위해 환경세팅이 필요한데,또 까먹을 것 같아서 정리ㅎ 아래의 링크 접속 (오라클 홈페이지)https://www.oracle.com/java/technologies/downloads/#java8 원하는 운영체제에 맞게 파일 다운로드!🎈 (오라클 회원가입 되어있어야 설치 가능) 파일을 받아 설치까지 완료되었으면 환경 변수 설정을 해줘야 한다. 내 PC 우클릭 -> 속성 좌측의 정보 -> 고급 시스템 설정 클릭 고급 탭 -> 환경변수 클릭 시스템 변수 쪽에 새로 만들기 버튼 클릭 이름은 JAVA_HOME 으로 작성하고,변수 값에는 jdk 파일 설치한 경로 설정해 준다. 그리고 시스템변수 목록을 보면 Path가 있는데이를 선택하고 편집 버튼 클릭! 환경 변수 편집이 나오면 새로 만..
컴포넌트 제어 컴포넌트는 속성 / 이벤트 / API를 통해 제어가 되고 있다.제어를 하기 위해 가장 먼저 할 일은? 내가 제어할 컴포넌트의 id를 적용하는 것!id 만들 땐 공백 사용 x, 특수문자는 언더바 외에 다른 것은 쓰지 말자! 이렇게 id를 지정해 줘야 해당하는 아이디가 이 페이지에서 전역변수처럼 사용이 된다. $p 객체 사용 id 지정을 했다면API를 사용해 컴포넌트의 설정을 해보자! Script 탭으로 이동한다. 현재 설정하고자 하는 컴포넌트는 날짜를 나타내는 input 창이다.기본으로 오늘 날짜를 띄우고 싶은 상태.이때 웹스퀘어의 유틸성 자원을 이용해 설정해 줄 수 있다. // 오늘날짜 가져오는 함수 // yyyyMMddHHmmss, 패턴 안넣으면 yyyyMMdd임! var cu..
테이블 그리기 테이블(표) 형태를 그리고 싶다면?tableLayout을 사용한다! Palette 뷰어에서 TableLayout을 찾아 클릭해 준다. 그럼 위와 같은 창이 뜨는데,열과 행, 테이블 모양 등을 지정할 수 있다. 테이블을 만들고 난 뒤 상단 메뉴에서 행/열 추가, 삭제 등 기능을 사용할 수 있다. 그리고 각 칸마다 안쪽에 자식노드로 컴포넌트를 넣어줄 수 있다.이때 퀵 툴바를 사용할 수 있는데, 원하는 컴포넌트를 클릭하고 스페이스 바 누르기!(모든 컴포넌트가 다 나오진 않음) 현재 상태에서 웹 브라우저를 실행시키고,웹 페이지 크기를 줄여보면 자식 노드로 들어있는 컴포넌트들이 크기가 변하지 않아이상한 형태로 보이게 된다. 사이즈에 따라 테이블 모양이 바뀌는 형태 > 적응형 UI를 사용해 위 ..
웹스퀘어에서 컴포넌트를 생성하게 되면 크기 조절은 가능하지만 위치 변경은 불가능하다.이 컴포넌트 위치 변경하는 방법을 알아보자! 컴포넌트 사용법 먼저, 웹에서의 CSS 방법은- Static / Relative / Absolute / Fixed / Sticky Position 이 있다.이 중 Static과 Absolute가 가장 많이 쓰인다. Static : 지정된 포지션 없음, 크기만 지정되어서 사용됨, 화면에 그려준 컴포넌트의 순서대로배치하는 방식. 절대적인 좌표값을 가지지 않고 그려진 순서대로(순차적으로) 그려나가는 방법이다.Absolute : 정해진 포지션이 있음. top/left 등과 같이 정해진 포지션이 따라 화면을 배치한다.흔히 말해 절대 좌표값 상단 툴메뉴에서 아래의 드롭다운 버튼을 클릭한..
WebSquare의 컴포넌트 활용법 WebSquare에서는 다양한 컴포넌트를 손쉽게 만들 수 있다.컴포넌트들의 종류와 특징에 대해 간략하게 알아보쟈! 입력 컴포넌트 SearchBox : 창 안에 x 버튼이 있는 input ( x 버튼을 누르면 입력한 내용 사라짐)Secret : 비밀번호 입력과 같은 경우 사용함입력값 자체를 보이지 않게 하기 때문에 input 컴포넌트에 비해 속성 등이 더 적음!InputCalendar : 달력을 통해 날짜 선택 가능속성에서 calendarValueType이 default로 yearMonthDate로 되어있지만, 연월/연단위 등으로 변경 가능하다.Spinner : 숫자의 증감 표시할때 사용Textarea : 여러 줄의 텍스트 입력 시 사용Editor (CKEditor..
컴포넌트 사용법 웹스퀘어에서 컴포넌트를 사용하려면 3가지 방법을 이용하면 된다. 1. 컴포넌트가 지니고 있는 속성2. 이벤트3. API 1. 속성 1) 원하는 컴포넌트 선택 2) 우측을 보면 Property 탭이 있음.Property - 속성탭 선택! 3) 해당하는 컴포넌트의 속성과 적용방법을 볼 수 있다.내용은 마우스오버 (마우스 가져다 대기), 더 자세히 보고 싶다면 F1 웹스퀘어의 컴포넌트는 id 중심이다.그래서 이곳에서 id를 반드시 입력해줘야 사용할 수 있다.설정 후 디자인 탭에서 컴포넌트에 마우스를 가져다 대면 툴팁이 나오는데,▼ 이 툴팁은 상단 버튼을 선택해 표시하거나 숨길 수 있다. property 설정 내용 (간략)initValue : 초기값 설정dataType : 데이터 타입 ..
SQL문을 작성하다 보면 서브쿼리가 반복적으로 사용되는 경우가 있는데 이러한 경우는 쿼리가 복잡해지고 유지보수도 어려워지게 된다.
이러한 단점을 해결하기 위해 WITH절을 사용해 서브쿼리에 이름을 붙여 사용할 수 있다.
VIEW와 비슷해 보이지만 VIEW의 경우는 DROP 전까지 사라지지 않고 다른 쿼리에서도 재사용이 가능하지만
WITH의 경우에는 실행되는 쿼리문 안에 작성되어 있어서 해당 쿼리에서만 사용이 가능하다는 특징이 있다!
기본 문법
WITH 임시테이블명 AS (
사용할 서브쿼리
)
SELECT 컬럼1, 컬럼2, ...
FROM 임시테이블명
WITH절에 '임시테이블명' 으로 이름을 붙여 SELECT 절에서 해당 테이블을 참조해 쿼리를 작성한다.
예시
- 부서별 평균 급여보다 급여를 많이 받는 직원을 조회한다.
WITH DEPT_AVG AS (
SELECT DEPT_ID
, AVG(SALARY) AS AVG_SALARY
FROM EMPLOYEES
GROUP BY DEPT_ID
)
SELECT T1.NAME
, T1.SALARY
, T1.DEPT_ID
FROM EMPLOYEES T1
INNER JOIN DEPT_AVG T2
ON T1.DEPT_ID = T2.DEPT_ID
WHERE T1.SALARY > T2.AVG_SALARY
;
위 예시는 간단한 예시이지만 실무에서는 중복된 서브쿼리를 사용하는 경우가 많다.
많이 중복되는 서브쿼리일수록 WITH절을 활용해 쿼리를 분리하면 가독성과 성능 측면에서도 좋은 결과가 나올 거라 생각된다!
// 오늘날짜 가져오는 함수
// yyyyMMddHHmmss, 패턴 안넣으면 yyyyMMdd임!
var curDate = $p.getCurrentServerDate(); //yyyyMMdd
ipcDate.setValue(curDate);
웹스퀘어에서는 각각의 유틸성 자원에 대해 $p라는 객체를 제공한다.
$p. 입력하면 웹스퀘어에서 활용 가능한 api 목록 확인이 가능하다.
현재 날짜를 가져올 땐 getCurrentServerDate() api를 사용한다.
처음 입력할때 인자로 (pattern)으로 뜨는데, ("yyyyMMddHHmmss") 으로 설정하면 날짜와 시간이 나오는 형식으로
설정이 가능하다. ( * 대소문자 가려서 잘 구분해서 써줘야 함!)
만약 패턴을 넣지 않으면 기본 yyyyMMdd 형식이다 (연/월/일)
그리고 컴포넌트id.setValue의 인자로 만들어 준 변수를 넣어준다.
선택지 만들기
콤보박스, 라디오, 체크박스와 같은 것들은 값을 하나만 표시하지 않는다.
여러 목록 중 하나 혹은 여러개를 선택해야 하기 때문이다.
이런 컴포넌트들을 이용할 땐 목록을 세팅해줘야 하는데,
리스트를 직접 넣어주는 하드코딩 방식이 있다.
1. 직접 넣어주기
1) 먼저 라디오 버튼이나 체크박스 등과 같은 컴포넌트를 더블클릭 한다.
2) 추가버튼을 눌러 원하는 만큼 항목을 추가하고,
Label과 Value 값을 넣어준다.
이렇게 넣어주고 저장, 웹 브라우저 실행하면
위 사진 처럼 내가 넣어준 항목들을 확인해 볼 수 있다.
또 SelectBox 설정에서 보면
All Option과 Choose Option 두 가지가 있다.
All Option : -전체- 가 뜬다. 내부 값이 All이 뜨고, Null이 입력되지 않는다.
Choose Option : -선택- 이 뜬다. -선택-을 선택하면 빈값이 선택된다.
Choose Option에서 내용을 우리가 직접 입력하여 바꿔줄 수 있다.
여기서 "전체"라고 이름 붙여줄 수 있고, 아예 아무것도 없는 공란으로 설정하고 싶다면 $blank를 입력한다.
All Option과 Choose Option을 둘 다 적용한 결과
2. API 방식 사용
이번엔 하드코딩이 아닌 API 방식을 사용해보자.
컴포넌트id.addItem(value, label, index) 형식이다.
// API를 통해 항목을 추가
// 마지막 index는 생략 가능 (0,1...)
ui_gender.addItem("F", "여성", 0);
ui_gender.addItem("M", "남성", 1);
이렇게 설정하면 라디오 버튼에 여성, 남성이 나온다.
만약 index를 바꾸게 되면 index 순서대로 버튼이 변경되어 나오게 되고,
addItem을 쓸 때 index 생략도 가능하다.
생략한다면 선언한 순서대로 나온다.
라디오나 체크박스는 전체나 선택 같은 옵션은 존재하지 않는다.
다만 Direction을 통해 가로/세로 보이는 방향을 선택할 수 있다.
Span Count : Span Direction이 rows일 때 Span Count가 1이 기본으로 들어감.
1이면 한 줄, 2면 두 줄, 3이면 세 줄
3. 데이터 List와 연결
실제 값을 가지고 있는 데이터 List와 연결하는 방식을 이용하자!
데이터 객체를 만들어 연결시키는 방식이다.
🗒️ 데이터 객체 만들기
Outline에서 Head 탭을 이용해 만들어준다.
1) Head에 들어가면 보이는 DataCollection 우클릭 - 선택창이 나오는데, 나는 DataList 추가 선택!
2) Apply and Close
3) 만든 뒤 DataCollection 하위에 생성이 되는데, F2를 통해 이름을 변경할 수 있다.
4) 만들어진 DataList를 더블클릭하면 편집창이 뜨는데,
row를 추가해서 내용 입력 후 완료하면 이 데이터 객체와 연결을 시킬 수 있다.
5) 디자인탭에서 원하는 컴포넌트를 더블클릭,
NodeSet에 원하는 데이터 객체를 선택해 준다.
(NodeSet : 데이터 객체, Label : name, Value : code 선택)
이때 BindItemSet을 반드시 체크해줘야 한다!
그리고 웹브라우저를 실행해 보면 아무것도 안 나온다.
선언만 하고 데이터를 주지 않았기 때문이다.
데이터를 볼 땐 실행된 화면에서 ctrl+마우스 우클릭
(웹스퀘어에서 제공 가능한 여러 디버그 메뉴들을 볼 수 있다.)
데이터 관리를 위함이니까 dataCollection 보기를 선택한다.
그럼 아래와 같은 창이 하나 나온다.
dataCollection 드롭다운하면 내가 만들어 둔 데이터 객체 이름이 나온다.
이걸 선택하고,
DataType은 JSOIN/XML/XML(Highlight)/ARRAY 등의 형태로 파악할 수 있다.
여기서 search 버튼을 누르면?
아무것도 안 나온다.
당연함
데이터를 안 넣었음
데이터 만드는 법
1) outline에서 데이터 객체 더블클릭한다.
2) Data 탭 클릭!
3) 데이터 추가 버튼을 눌러서 데이터 입력 후 이걸 사용한다는 의미에서 반드시 use data 체크한다!
(체크 안 하면 데이터 안 나옴..)
그리고 다시 브라우저 실행시키면
원하는 대로 항목들이 나오고,
dataCollection 보기를 하면
데이터가 잘 뜬다!
Script로 데이터 넣는 법
use data를 쓰지 않고 (위 방식)
script로 넣는 방법도 있다.
웹스퀘어의 컴포넌트들은 id를 주면 전역변수로 올라가는데,
데이터 객체 역시 적용된 id를 입력 후 점(.)을 찍으면 사용 가능한 api들이 보인다.
(==전역변수처럼 사용이 가능하다!)
데이터를 넣을 때 1차원 array 형태는 setData, xml 형태는 setXML이고,
json 형태는 setJSON이다.
현재 json 타입으로 데이터를 받고자 하기 때문에
데이터 객체 id.setJSON(jsonData, append) 형식을 사용한다.
append는 true라면 기존 데이터를 지우지 않고 뒤에 붙이고,
false라면 기존 데이터를 지우고 이것만 넣겠다는 의미이다.
입력하지 않으면 default값은 false다.
// json 형태의 데이터로 만들어서 입력
var jsonData = [{"code":"01","name":"PM"}
,{"code":"02","name":"PL"}
,{"code":"03","name":"DEV"}
,{"code":"04","name":"DES"}
];
dc_code.setJSON(jsonData);
실행 결과
Q. 혹시 동적으로 API를 통한 바인딩이 불가능한가요?
A. 가능합니다!
BindItemSet에 체크 해제하고,
아래의 코드를 입력한다.
// API를 통한 bind
chkRole.setNodeSet("data:dc_code", "name", "code");
(여기서 chkRole는 role 나타내는 컴포넌트 id!)
형식은 컴포넌트id.setNodeSet(nodeset, label, value)
- nodeset : 적용할 데이터 리스트. 반드시 앞에 data: 를 붙여 사용해야 한다.
SearchBox : 창 안에 x 버튼이 있는 input ( x 버튼을 누르면 입력한 내용 사라짐)
Secret : 비밀번호 입력과 같은 경우 사용함 입력값 자체를 보이지 않게 하기 때문에 input 컴포넌트에 비해 속성 등이 더 적음!
InputCalendar : 달력을 통해 날짜 선택 가능 속성에서 calendarValueType이 default로 yearMonthDate로 되어있지만, 연월/연단위 등으로 변경 가능하다.
Spinner : 숫자의 증감 표시할때 사용
Textarea : 여러 줄의 텍스트 입력 시 사용
Editor (CKEditor) : 인스웨이브에서 만든 것은 아니고, CKEditor를 사서 내장한 형태.
출력 컴포넌트
Textbox : 입력하는 내용이 길 때 사용하고, 기능이 좀 더 많은 편 제목이나 조건에 활용 가능하고 tagname 등 속성을 지정할 수 있다. ++ 텍스트박스에서 alt+엔터로 줄 넘김 가능한데, 이런 경우 br 태그가 그대로 보이게 된다. 이는 escape 설정을 false로 설정해주면 된다! (escape 설정은 입력된 문자열을 태그로 치환해서 보여주는 것)
Span : 간단한 라벨 나타낼 때 사용
Image : 이미지
Progressbar : 진행률!
항목/값 선택 컴포넌트
Checkbox : 여러개 선택
MultiSelect : 컨트롤 키 누른 상태에서 선택해야 다중 선택 가능함. 따라서 모바일과 태블릿에서는 사용 불가해 활용도가 떨어진다!
Radio : 하나만 선택
SelectBox : 드롭다운 선택
CheckCombobox : MultiSelect의 단점을 보완한 컴포넌트 드롭다운 박스에서 항목들을 체크하여 다중 선택 할 수 있다.
AutoComplete : 검색이 가능함. 옵션에 따라 다름 (ex. 초성검색 등)
PageList : 페이징처리
Calendar : 단순 달력 표현, 다른 기능이 없어서 활용도는 떨어짐
ScheduleCalendar : 구글 캘린더와 비슷
전송/이동 컴포넌트
Trigger : 버튼
Upload : 단건 업로드
MultiUpload : 다중 업로드, 옵션에서 mode가 flash로 되어있는데 이를 html5_transparent로 변경해줘야 함
그룹/탭 컨트롤 등 컴포넌트
Group : 하위 자식 노드를 갖는 컴포넌트. html에서 그룹으로 묶을 때 div로 많이 묶는데, 여기에서는 div 대신 group를 사용한다. 속성에 보면 tagname 속성이 있는데 아무것도 설정하지 않으면 기본 div, 그 외에 html에서 사용하는 모든 태그들이 있음 + 입력값을 초기화해주는 .init() 이라는 API가 있고 하위 컴포넌트 값을 초기화해줄 수 있다.
TableLayout : 테이블 형태!
SlideHide : 좌측에 접었다 폈다 할 수 있는 메뉴 (보통 메인에서 사용)
Switch : 화면을 넘기는 용 - 단점 : 한 화면에 화면 1,2,3을 다 넣어놓고 해당하는 부분만 구분해서 지정하기 때문에 내용이 많아질 수 있음
Accordion : 내용을 접었다 폈다 할 수 있다.
IFrame : 부모와 독립된 영역의 화면을 그릴 수 있다. 부모 컴포넌트와 id 중복이 되지 않는다는 장점이 있고 화면에 대한 코딩 접근이 쉽다. 하지만 웹 브라우저가 하나 더 뜨는 형태이기 때문에 무거워져서 많이 쓰는 경우 브라우저가 강제로 종료되는 현상이 발생할 수 있다.
WFrame : IFrame 대신 사용할 수 있는 것. IFrame과 구성이 거의 동일하지만, - IFrame -> 웹 브라우저가 하나 더 뜨는 형태 - WFrame -> 페이지 자체를 인클루드 하는 형태 하나의 페이지 안에 모든 영역이 다 뜨게끔 표시함 그렇기 때문에 공통된 자원을 활용하고, 여러 웹 브라우저를 띄우는 효과가 나지 않아서 메모리를 훨씬 적게 사용함
TabControl : 탭을 추가하게 되면 WFrame 유형으로 기본 작성됨. => frameMode를 선택할 수 있고, 아무것도 선택하지 않으면 default WFrame