반응형

위지윅 에디터들은 보통 내장 함수로 에디터에 작성한 내용을 가져올수가 있다. (ex setData())



하지만 이렇게 가져온 값이 TEXT 만 가져오는 것이 아닌 위지윅에서 자동으로 만든 HTML 형식으로 가져오는 경우도 발생하게 된다

예를 들면 ckeditor4가 그러하다 



내가 필요한 것은 에디터 내에 작성한 내용 중 태그들을 제외한 text들만 가져오고 싶고 에디터 내에서 그러한 함수를 제공하지 않는다면 


정규식을 이용하여 TEXT만 출력 하도록 할 수가 있다.


replace 함수를 이용하여 태그 형식으로 된 문자열을 모두 삭제하는 방식이다.



var editorContent = CKEDITOR.instances.editor.getData();
var convertContent = editorContent.replace(/(<([^>]+)>)/ig,"");
console.log(newText);
console.log(newText.length);


그 결과는 아래 그림 처럼 나오게 된다.






추가적으로 특정 태그만 제거를 하고 싶으 시에는 


정규화식을 다음과 같이 바꿔주면 된다.


var convertDivContent = editorContent.replace(/<(\/div|div)([^>]*)>/gi,"");





해당 자료는 https://webisfree.com/ 를 참조 하였습니다.

반응형
반응형

정말 자주 쓰는 기능이지만 매번 찾고 매번 헷갈리는것 같다



String to Date

String from = "2018-11-28 10:10:10";

SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date to = transFormat.parse(from);


Date to String 


Date from = new Date();

SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String to = transFormat.format(from);


반응형

'IT > JAVA' 카테고리의 다른 글

[JPA] Composite-id class must implement Serializable 에러  (1) 2019.05.28
모바일 체크 로직 예제  (0) 2019.04.28
반응형

java.math.BigDecimal cannot be cast to java.lang.Integer 이란 에러는


DB에서 BigDecimal 형식의 값을 int 변수에 넣을 때 발생 하였다.



해결 방법으로는



BigDecimal 내장 함수인 intValueExact()

혹은


intValue()

를 사용 하면 된다.

반응형
반응형

<textarea>


<text>태그와 같은 기능을 수행하지만 

<input type='text'>, <text>는 한 줄의 텍스트를 입력 받게 된다.


반면

<textarea> 의 경우 여러 줄의 text 값을 입력 받을 때 사용하게 되는 텍스트 박스이다.





<textarea> 내의 엔터가 포함 된 text를 입력 하게 되고 해당 값을 자바스크립트 등으로 값을 출력해보면 

아래의 그림 처럼 값을 얻을수 있다.


- 화면 textarea 입력 화면



- jquery를 이용하여 textarea 값을 확인 


- textarea의 값을 자바 단에서 받은 값 




보통 우리는 화면에서 textarea의 값을 jquery를 이용하여 값을 가져오고 ajax를 통해 자바단(controller) 로 값을 던지게 된다.

이를 DB에 저장하고 추루 이 값을 그대로 출력했을때는 아래의 그림 처럼 엔터값(줄바꿈) 이 적용 안되는 것을 볼 수 있다.


이는 TEXTAREA의 값은 TEXT 값이고 이 안에서 엔터(줄바꿈) 값은 \n 으로 표현된다.

이를 <br> 로 치환하여 db 저장 하면 출력시 아래의 화면 같이 줄바꿈이 적용되어 표현이 된다.




하지만 아래 그림처럼 해당 값을 수정해야 될 경우가 있을 때는 아래처럼 줄바꿈을 나타내는 <br> 이 text로 표현 되어 나오게 된다.




이러한 경우를 다 고려 했을 때 다음과 같이 2가지 방법을 사용 할 수 있다.



1, textarea 값을 DB 저장 후 수정이 가능 할 경우 


textarea 값을 치환 없이 DB 저장 -> 수정 시에는 그대로 값을 출력,  단순 값 출력일 경우 '\n'을 <br> 태그로 수정하여 출력





2. textarea 값을 DB 저장 후 단순 출력 만 할 경우


textarea 값의 엔터값(줄바꿈) '\n' 을 <br> 로 치환 하여 DB 저장 -> 후에 DB 값 그대로 출력






반응형
반응형

스프링 프레임워크를 이용하여 다국어 메세지 처리를 설정할 수 있다.

다국어 처리를 통해 동일 페이지를 언어별로 만들지 않고, 한페이지 내 에서 언어코드를 이용하여 사용자에게 설정된 언어로 웹 페이지를 제공 할 수 있게 된다.


프로젝트를 진행하면서 다국어 관련 자료를 많이 찾게 되었고, 적용방법 또한 여러 방법이 있었다.

일반적인 방법은


1. 다국어 메세지 설정 파일 작성

2. 메세지 프로퍼티 파일 작성

3. 인터럽트를 통해 Language Code 변경 혹은 설정

4. java 혹은 jsp 파일 내에서 메세지 key 값으로 불러오기



하지만

내가 적용 하고 싶은 방법은 인터럽트를 통해서 Language Code를 설정하는 것이 아닌

로그인 성공하게 되면 로그인 한 사용자DB 정보 중 Language Code 값을 통해 웹 사이트의 Language Code를 설정하고자 한다.



첫째로 다국어 처리 관련 설정을 할 'message=context.xml' 을 작성한다



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages/message"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="ko"/>
</bean>

</beans>


messageSource를 사용하기 위해 bean에 추가하고, basename 으로 'classpath:messages/message' 를 설정 기본 인코딩 값을 UTF-8로 설정

  - basename의 설명은 아래 그림을 참조하자

 - 그림에서 보면 classpath는 resources로 설정되어 있고 그 하위에 messages 폴더가 존재, 그 하위에 message_xx.properties 파일들로 구성되어있는 곳을 basename으로 설정한 것이다.

위 messages, message의 색으로 구분 할 수가 있다.

<!-- ###################   MessageSource   ################### -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:/i18n/ui</value>
<value>classpath:/i18n/message</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"/>
</bean>


위의 경우처럼 ui, message 두개의 프로퍼티로 나눠서 구분 할 수도 있다.



message_xx.properties 파일 내에는 각 언어에 맞게 key = value 형식으로 값을 채워 넣는다.



이후 사용 방법으로는 다른 블로거의 내용을 참조 했다.


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

4. /WEB-INF/spring/appServlet/servlet-context.xml 파일을 수정하여 언어를 변경하기 위한 인터셉터를 등록합니다.

<interceptors>
    <beans:bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <beans:property name="paramName" value="lang" />
    </beans:bean>
</interceptors>

servlet-context.xml 파일의 기본 네임스페이스가 mvc 이므로 바로 <interceptors> 를 사용했습니다. 만약 기본 네임스페이스가 beans 등으로 mvc가 아니라면 <mvc:interceptors> 로 사용되어야 할 것입니다.  이 설정의 의미는 /i18n.do?lang=ko, /i18n.do?lang=en 등으로 요청을 보내면 컨트롤러 앞단에서 요청을 가로채서 언어를 변경하는 역할을 수행합니다.



출처: https://offbyone.tistory.com/24 [쉬고 싶은 개발자]



5. Java 코드에서 다국어 메세지를 사용하는 방법 입니다. com.tistory.pentode.HomeController.java 파일 입니다.

package com.tistory.pentode;

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HomeController {
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    @Autowired
    SessionLocaleResolver localeResolver;

    @Autowired
    MessageSource messageSource;

    @RequestMapping(value = "/i18n.do", method = RequestMethod.GET)
    public String i18n(Locale locale, HttpServletRequest request, Model model) {

        // RequestMapingHandler로 부터 받은 Locale 객체를 출력해 봅니다.
        logger.info("Welcome i18n! The client locale is {}.", locale);

        // localeResolver 로부터 Locale 을 출력해 봅니다.
        logger.info("Session locale is {}.", localeResolver.resolveLocale(request));

        logger.info("site.title : {}", messageSource.getMessage("site.title", null, "default text", locale));
        logger.info("site.count : {}", messageSource.getMessage("site.count", new String[] {"첫번째"}, "default text", locale));
        logger.info("not.exist : {}", messageSource.getMessage("not.exist", null, "default text", locale));
        //logger.info("not.exist 기본값 없음 : {}", messageSource.getMessage("not.exist", null, locale));

        // JSP 페이지에서 EL 을 사용해서 arguments 를 넣을 수 있도록 값을 보낸다.

        model.addAttribute("siteCount", messageSource.getMessage("msg.first", null, locale));

        return "i18n";
   }

콘솔 출력 결과 입니다. (언어가 영어로 선택되어 있는 경우)

 

 

 

messageSource의 가장 기본 적인 사용법은 다음과 같습니다.

 

message.getMessage(메세지 키값, 대체할 값이 있을경우 값의 배열, 메세지 기본값, 로케일);

 

메세지 키값에 해당하는 값이 없을 경우 세번째 인자인 메세지 기본값이 출력됩니다.



출처: https://offbyone.tistory.com/24 [쉬고 싶은 개발자]


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ



내가 적용한 부분은 jsp 부분에서 다음과 같이 호출 하였다.


<dt class="column-table__title column-table__title--border">
<spring:message code="site.title" />
</dt>


jsp 에서 사용 방법은 <spring:message code="properties 에서 설정한 key 값" />


더 자세히 찾아보면 다음고 같이 추가적인 옵션을 넣어서 사용할 수도 있다.


<spring:message code="properties 에서 설정한 key 값" arguments="value" text="default 값" />


arguments 옵션은 properties 파일 내 {0}, {1}... 등등으로 변수를 선언해주고 선언해준 변수에 값을 넣을 때 사용 된다.



여기 까지가 구글링을 통해 찾아본 다국어 적용 방법이고 이후는 프로젝트 상황에 맞게 추가적으로 진행한


내가 적용 하고 싶은 방법은 인터럽트를 통해서 Language Code를 설정하는 것이 아닌

로그인 성공하게 되면 로그인 한 사용자DB 정보 중 Language Code 값을 통해 웹 사이트의 Language Code를 설정하고자 한다.


에 대한 내용이다.


public void loginSuccess(HttpServletRequest request,HttpServletResponse response,
Authentication authentication) {

LoginUser loginUser = (LoginUser) authentication.getPrincipal();

/**
* 다국어 적용을 위한 초기 언어 설정
* */
if(loginUser.getLangCode().equals("zh_CN")) {
Locale locale = new Locale("zh","CN");
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setLocale(request,response,locale);
}
else if(loginUser.getLangCode().equals("en")) {
Locale locale = new Locale("en");
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setLocale(request,response,locale);
}
else {
Locale locale = new Locale("ko");
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setLocale(request,response,locale);
}

}


위의 loginSuccess 함수가 실행 되는 순서는 다음과 같다.


사용자 로그인 - springSecurity 설정파일에서 지정한 loginSuccessHandler 내 에서 실행 된다. 즉 로그인 이 성공하게 되면 실행되는 구조이다.

코드 내용은 loginUser에 로그인 한 사용자의 정보를 불러오고 그 loginUser 안에서 LangCode(Language Code) 값을 통해서 Locale 변수를 선언한다. 


언어 값을 지정하여 만들어진 locale 변수를 통해 SessionLocaleResover에 우리는 Locale(언어 값)을 지정한다. 

해당 작업은 위에서 설명한 인터럽트를 통해서 SessionLocaleResover 에 언어 값을 지정해주는 작업을 수동으로 로그인 성공시 지정하는 작업으로 이해하면 된다.


loginSuccessHandler 에서 위와 같은 작업을 진행하면 그 이후에는 세션이 끈기기 전까지는 계속해서 언어 값을 가지고 있을것이다. 


이후에는 위에서 설명한 java, jsp 등에서 사용하는 방법을 통해 다국어 메세지 처리 기능을 사용 할 수 있다.



ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ





 


반응형
반응형

- JSP에서는 <c:if> 는 사용되지만 <c:else> 는 사용할수 없다.

그래서 보통 두가지의 경우를 나타낼때는 아래의 형식을 사용하였는데


<c:choose>

<c:when></c:when>

<c:otherwise></c:otherwise>

</c:choose>


불필요하게 코드가 길어 지는 느낌이 들어 삼항연산자를 찾게 되었고


사용법은 보통의 삼항연산자 사용과 동일하였다.


${ value 연산자 value ? true 일 때 값 : false 일 때 값}


${key eq 'value' ? 'true' : 'false'}



반응형
반응형

load의 정의


웹 페이지의 내용을 동적으로 교체하기 위해서 Ajax로 서버에서 데이터 json 형식으로 받아 HTML 요소를 생성하여 페이지내의 원하는 위치의 

내용을 바꾸는 작업을 많이 합니다. jQuery의 .load() 메소드는 주어진 URL로부터 HTML 데이트를 받에서 jQuery 셀력터로 선택된 위에에 넣어 줌으로써 동적으로 페이지의 내용을 교체하는 작업을 간단하게 처리할 수 있도록 해줍니다.

출처: https://offbyone.tistory.com/235 [쉬고 싶은 개발자]



적용 사래 



한 페이지에서 댓글을 입력, 수정, 삭제 등의 작업을 한다. 

첫 구현은 ajax 후 페이지 리로드 되도록 작업 


$.post(url, dataParam, function (result) {
if (result.resultCode === 'success') {
alert("댓글 삭제 완료");
location.reload();
}
else {
alert("댓글 삭제 실패");
}
})


하지만 댓글의 경우 작업 하나하나마다 페이지가 리로드 되면 사용성이 현저하게 떨어지기에 해당 페이지에서 댓글 작업 이후에는 댓글 부분만 변경 되도록 수정



댓글 관련 부분을 언제나 동적으로 가져와야 되기에 따로 jsp 파일로 빼놓고 필요한 곳에서 include 시킴

<div id="comment_container">
<jsp:include page="comment.jsp"/>
</div>


댓글 입력, 삭제, 수정 등의 작업 ajax 에서 success 리턴 값을 받으면 댓글을 새로 조회하는 url을 호출 한다. 

여기서 comment_container 라는 div 안의 내용을 댓글을 조회하는 url에서 리턴 해주는 값으로 교체한다는 

load 함수를 사용한다.

$.post(url, dataParam, function (result) {
if (result.resultCode === 'success') {
alert("댓글 입력");
var url = "/echoline/reloadComment?requestNo=" + $('#click-requestNo').val() + "&requestIndex=" + $('#requestIndex').val() + "&status=" + $('#status').val();
$('#comment_container').load(url);


}
else {
alert("회원가입 실패");
}
})



load 함수의 파라미터 정의


Query .load() 메소드 사용법은 다음과 같습니다. 세 가지 인자를 가질 수 있습니다.


.load( url [, data ] [, complete ] )    반환값: jQuery


- url : 데이터를 받을 URL을 나타내는 문자열입니다.

- data : 선택적인 인자로 URL 로 요청을 보낼 때 같이 보낼 데이터로 자바스크립트 객체 또는 문자열 입니다.

- complete : 요청이 완료되면 호출되어질 콜백함수 입니다. Function( String responseText, String textStatus, jqXHR jqXHR )



출처: https://offbyone.tistory.com/235 [쉬고 싶은 개발자]

반응형
반응형

현상

 - td 안에 에디터에서 저장한 값을 표현할때 그대로 넣으면 td 값을 넘어서 img 이미지가 넘쳐서 보이게 된다. 


 해결

  - css의 max-width를 이용


.request-service__commentTable td img {
max-width:100%;
}

위와 코드는 해당 클래스 명 아래 td 안에 있는 img 태그에는 모두 max-width를 적용한다라는 뜻이다.


img에 width, height 가 설정되어있어도 우선순위가 더 높은 max-width를 따라가게 된다. 



< max-width 적용 전 >




< max-width 적용 후 >



이미지가 눌려서 깨지는 현상이 발생하지만 전체 이미지를 다 볼 수 있게 된다.

반응형

+ Recent posts