safari 에서 window.open() 안되는 문제

사파리에서는 window.open() 를 직접 호출은 되지만 간접 호출을 하게 되면 실행이 되지 못하게 막는다고 한다.

여기서 말하는 간접 호출이라는 것은

  • ajax 를 이용해 callback 했을 때의 window.open()
  • 이와 비슷한 콜백을 통한 호출

해결법

let myWindow: any = window.open('about:blank');
...
ajax.then(data => myWindow.location.href = data);

이렇게 하면 된다


Angular 2, 4 에서 조건에 따른 컴포넌트 show / hide 하는 법

  • *ngIf=" 여기에 들어오는 것은 무조건 true 또는 false 이어야 한다 "
  • [hidden] : 조건에 따라 hidden 속성을 true, false 로 주고 style.css 에 숨김 옵션을 준다.

ng build --prod 안되는 문제

  • class 작성할때 default로 주면 안된다. AppModule 에서 import 할때 null을 반환하기 때문이다.
  • html 에서 service.method() 접근은 불가능하다.

Mixed Content: The page at 'https://dev.fltgraph.co.kr/m/followon' was loaded over HTTPS, but requested an insecure stylesheet 'http://fonts.googleapis.com/earlyaccess/nanumgothic.css'. This request has been blocked; the content must be served over HTTPS.

style.css 파일 내에서 import url이 http인게 있었다. https 에서 http 요청은 불가능하기 때문에 모든 요청에 대응하기 위해 // 로 바꿔주었음.


ng build -prod Module not found: Error: Can't resolve './$$_gendir/app/app.module.ngfactory' (진행중)

프로덕션 빌드를 할때 AoT 컴파일이 되지 않는다.

github/angular-cli 의 issue를 확인해보니 버전 때문에 일어나는 문제인듯하여 최신 버전으로 재설치했다.

> ng --version
1.2.0
> npm uninstall -g @angular/cli
> rm -rf node_modules
// LOCAL
> npm install --save-dev @angular/cli
> npm install
// GLOBAL
> npm install -g @angular/cli

안되서 AoT 컴파일 막아놓고 사용함.. (임시)

> ng build --prod --aot=false

폴더 옮긴 후 생긴 문제

webapp/WEB-INF/app 에서 webapp/app 으로 앵귤러 프로젝트를 옮기고 tsconfig.json 의 outDir 을 webapp/m/followon 에서 webapp/app/dist 로 옮겼다. 그 후 ng build 하고 서버 실행해서 브라우저에서 접속을 했더니 expected < 이거만 계속 떴다.

아마 트랜스파일 설정 때문에 이런거라고 생각해서 원본을 수정하지 않고 위치만 옮긴 후 outDir 을 원본과 똑같은 경로로 지정하여 빌드, 접속 하였더니 정상적으로 실행되었다.

경로 문젠가 싶어서 인텔리J의 강력한 find 기능으로 WEB-INF/app 또는 m/followon 으로 설정된 텍스트가 있는지 검사를 진행, node_modules 의 파일안에 WEB-INF/app 을 경로로 하고있는 모듈을 발견...

node_modules 을 완전 삭제하고 npm install 진행... 해도 안된다.

스프링에 sitemesh?? 여기서 경로를 설정하고 있어서 dist/index.html 내의 스크립트 import 경로를 상대경로에서 절대경로로 수정을 하였더니 제대로 되었다.


angualr cli 없이 app.component.html 을 템플릿에 추가했을때 불러오지 못하는 오류

불러오지 못해서 아래와 같이 main.ts에 넣고 돌렸는데 똑같이 불러오지 못했음...

이상해서 캐시 지우고 새로고침 했더니 됨

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { Component } from '@angular/core';

@Component({
    selector: 'app-root',
    template: '<h1>ㄴㅇ러망러ㅣㄴ어리ㅏㅁㄹ {{ text }}</h1>'
})
export class AppComponent {
    text: string;
    constructor() {
        this.text = '어버법어버버버ㅓ';
    }
}
// COMPONENT

@NgModule({
    imports: [ BrowserModule ],
    declarations: [ AppComponent ],
    bootstrap: [ AppComponent ]
})
export class AppModule {}

platformBrowserDynamic().bootstrapModule(AppModule);

그래도 제대로 해결하려고 했는데 콘솔창에서 다음과 같은 오류를 보여줌

다음과 같이 path 변경해서 해결


Can't bind to 'ngModel' since it isn't a known property of 'input'

radio 버튼에서 [(ngModel)] 을 알 수 없어서 발생한 문제

해당 버튼이 보여지는 B 컴포넌트의 B 모듈에 FormsModule 을 import 해서 해결하였다.

루트 모듈인 A 모듈에서는 B 모듈을 import 하고 있기 때문에 FormsModule 를 파일만 import 하고 데코레이터에 정의된 import 에서는 제거하였다. 나중에 문제 생기면 지금 작성한 이거보고 해결하겠지? 바보가 아니라면


Supplied parameters do not match any signature of call target

A와 B 컴포넌트에서 서비스를 호출하는 부분이 있는데 A.ts 에서 인자를 넣어주지 않아서 발생한 문제.

모니터 큰걸 써야 잘 보인다


Component is part of the declaration of 2 modules

A 컴포넌트와 B 컴포넌트에서 C 컴포넌트를 자식 컴포넌트로 들고 있을때, A 모듈과 B 모듈 모두에서 C 컴포넌트를 declarations 에 추가하고 있어서 발생하는 문제.

A 모듈이 상위 모듈이고 B 모듈을 import 하고 있기 때문에 C 컴포넌트를 B 모듈의 declarations 에 추가하고 exports 하였다.

A 모듈에서는 C 컴포넌트를 따로 추가 할 필요없이 B 모듈을 import 하고 있어서 사용이 가능


Mixed Content 문제

https 에서 http 로http request 하다가 발생한 문제

http 에서 https 로의 요청은 가능해도 그 반대는 안됨. 브라우저에서 차단함.

해결을 위해서는 https -> https 로 되도록 사이트 구축


XMLHttpRequest cannot load [urlA]. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'urlB' is therefore not allowed access.

CORS 문제. 컨트롤러에 @CrossOrigin 을 붙이거나, 여러가지 방법을 사용할 수 있는것 같다.


Could not write JSON: Infinite recursion

A 객체에서 B를 필드로 들고있고, getB() 해서 호출이 가능한데 B 에서도 A를 필드로 들고있고 getA() 해서 들고있는 경우...

A 를 JSON 변환해서 반환하려고 할때 스택오버플로가 난다.

이를 해결하게 위해서 @JsonIgnore 또는 trasient 같은걸 사용해서 JSON 변환이 되지 않도록 한쪽을 틀어막아야 한다.

이것이 완벽한 정답은 아니고, 지금 임시로 해두었기 때문에 나중에 다른 방법을 찾아야 할 것이다.


service.getDate() is null

serviceSQL.xml 에서 query의 field 이름이랑 java object의 field 이름을 맞춰주지 않아서 매핑이 되지 않았음

그러니까 그냥 바보짓으로 인한 오류


Angular2 RangeError: Maximum call stack size exceeded

이게모지


IE11 에서 SVG 렌더링 안되는 문제

스크립트로 생성된 svg 엘리먼트를 콘솔에 찍어보니 svg 엘리먼트는 생성이 되었지만 안에 내용물이 없었다. 왜지?

console.log(new XMLSerializer().serializeToString(scalableVectorGraphics)) 로 찍어보니까 내용물이 보임.

IE11 에서 innerHTML을 지원하지 않기때문에 이러한 문제가 발생하는 것이었음

innerHTML을 직접 구현한 라이브러리를 가져와서 해결을 했는데 그냥 new XMLSerializer().serializeToString(leg.svg) 리턴해도 됐음


완전 개띨빡 멍청한 자바스크립트 기본 숙지가 제대로 안된거 땸시 날린 시간이 아깝다

var select_switch = function() {
    $select_citito_from = $(this).parent().find(".select_cityto_from");

    if ($(this).val().length == 0)
        $select_citito_from.show();
    else
        $select_citito_from.hide();
}

$("#departureCitySelect").on("keyup", select_switch);
$("#departureCityFrom").on("keyup", select_switch);

위 코드를 보면 $select_citito_from 변수의 선언에서 var가 생략되어 있다. 그래서 저 변수는 전역변수가 되었고 두번째 keyup 이벤트에서 저 변수에 접근할때 개병신같은 행동으로 쳐해서 undefined로 인식함.. var로 했더니 고쳐졌다


데이터베이스 한글 꺠짐 문제

나를 못믿어도 좋지만 다른 사람을 못믿어도 됨 (테이블 생성 시 utf-8 로 안되있었음)


마이바티스 쿼리 문제

제대로 된 결과를 가져오지 못해서 쿼리를 찍어봤더니 choose 내의 when과 otherwise가 함께 찍혔다. if-else 같은건데도 말이다

<choose> 위에서 쿼리를 include 하고 있었는데 그 곳에서 마지막에 order by xxxx 를 리턴하고 있었다.

SQL 오류로 돌아가지 않았어야 헀지만 돌아간 것을 보니 오라클이 mysql을 매장시키기 위해 뿌려놓은 수많은 떡밥중 하나같다.


Cannot invoke an expression whose type lacks a call signature. Type 'Number' has no compatible call signatures.

타입 스크립트에서 다음과 같이 게터를 사용할때 나온 에러

this._timeZone - this._next.TimeZone() > 0

getter와 setter를 사용하게 되면 위에서 () 를 빼주어야 한다.

//getter
this._next.TimeZone
//setter
this._next.TimeZone = 10

이게 가능한 이유는 타입스크립트가 자체적으로 추론해서 setter 는 readonly 로 인식을 한다.

readonly 는 타입스크립트에서 읽기만 가능하게 해주는 정의이다.


파일 저장시 File.separator 문제

파일을 업로드해서 DB에 저장했더니 윈도우 환경이라서 로 나온다. 실제 서버에서는 / 로 저장함.


병신같은삽질 170622

HTML의 input type file은 보안상의 이유로 set value를 할 수 없다. 삽질하지말자


Controller 에서 리턴받은 json 값에서 한글깨짐 현상

produces = "application/json; charset=utf8" 를 추가했다.


서버에 배열 형태로 데이터를 보냈을 때 Spring Controller가 배열 데이터를 받지 못하는 경우

현상 ) travelers[]=1111111111111111&travelers[]=2222222222222222&travelers[]=3333333333333333"

jQuery 1.4 부터 $.param() 함수는 중첩 객체 직렬화를 사용하기 때문에 이러한 현상이 발생

해결)

$.ajaxSettings.traditional = true; 를 추가.

서버로 보내는 데이터가 var array = []; array.push(value); 형태의 array 이면 Controller 에서는 type[] array 형태로 받으면 된다.


정수연산 삽질 1706019

timestamp 를 이용해서 시간 차를 얻기 위한 interval 메서드 구현도중 정확한 결과값이 나오지 않는 문제

중간중간 연산 결과를 출력해서 보았더니 day 를 계산하는 부분에서 나누기를 하기 때문에 실수형 값이 나오게됨

parseInt 함수를 사용해 연산 결과를 정수형으로 변환하여 받아서 해결


로컬 리포지토리에서 작업한 내용을 Gitlab 프로젝트에 push를 하는 과정에서 오류 발생 2017-06-05

You are not allowed to push code to protected branches on this project.

해결

Gitlab에서 프로젝트 master 브랜치가 protected 브랜치로 되어있음. 풀어서 일단 push 후 다시 protected로 변경

내 계정에 master 권한 추가


서버 설정

Open launch configuration 으로 ㄱㄱ

마지막 줄인 -Dspring.profiles.active=local 추가


Maven Missing Artifact 문제

2017-06-07

work branch 에서 작업 후, merge 하기 위해서 master branch 로 checkout 하고 pull 을 하였다.

긴 시간동안 build 를 하더니, 다음과 같은 오류가 발생하여서 WAS 실행이 되지 않았다.

빨간줄이 뜨는 라이브러리는 3개

  • elasticsearch(2.3.4)
  • transport(5.1.1)
  • jest(0.1.6)

해결을 위해 했던것들

Project > Mave > Download Source

해결

로컬 라이브러리에 jar를 받아서 하기에는 문제가 좀 있기 때문에 네트웤을 통해서 가져오는 방법을 찾아봐야 한다.

(개인 프로젝트도 아니라서 직접 받아서 쓰다가 어떤 문제가 생길지 모르기 때문이다.)

  • https://maven.apache.org/download.cgi 에서 바이너리 아카이브 설치
  • D: 에 넣어줌
  • Eclipse > Windows > Preferences > Maven > User Settings > 설치한 maven 폴더내의 conf\settings.xml 경로 설정
  • Update Dependency
  • 해결

results matching ""

    No results matching ""