10월 19, 2023

Websquare combobox setValue가 아닌 index로 설정하기 - setSelectedIndex()

 Websquare combobox에서 default 값을 설정할 때 

comboboxId.setValue() 로는 설정이 불가능한 상황이 있다. 


예를 들어 dataset을 사용하는데 2번째 행과 3번째 행이 모두 "Z"라는 value를 가지고 있을 경우이다. 


만약 내가 3번째 행을 default로 선택해서 보여주고 싶은데 2번째 행과 3번째 행이 모두 Z라는 value를 가지고 있다면


comboboxId.setValue("Z") 라고 하면 2번째 행이 디폴트로 보여진다. 


이럴 때는 setSelectedIndex를 사용하면 되는데 


setSelectedIndex( idx )
idx에 해당하는 index로 항목을 선택하는 기능으로 chooseOption, allOption 속성이 정의 된 경우 해당 item도 index에 포함된다.
Parameter
nametyperequireddescription
idxNumberY항목의 index.
Sample
  1. //아래와 같이 chooseOption이 적용 된 selectbox가 정의 된 경우.
  2. <xf:select1 id="selectbox1" chooseOption="true" style="position: relative;width: 148px;height: 21px;"disabledClass=" w2selectbox_disabled" appearance="minimal" >
  3. <xf:choices>
  4. <xf:item>
  5. <xf:label><![CDATA[남성]]></xf:label>
  6. <xf:value><![CDATA[M]]></xf:value>
  7. </xf:item>
  8. <xf:item>
  9. <xf:label><![CDATA[여성]]></xf:label>
  10. <xf:value><![CDATA[F]]></xf:value>
  11. </xf:item>
  12. </xf:choices>
  13. </xf:select1>
  14. selectbox1.setSelectedIndex(1); //chooseOption속성이 true임으로 "남성" 항목이 선택된다.



웹스퀘어 홈페이지에 나와있는 것처럼 index로 항목을 선택하는 기능이다. 


comboboxId.setSelectedIndex()  이런식으로 하면 되고 index는 0부터 시작하기 때문에 3번째 항목을 디폴트로 보여주고 싶으면 


comboboxId.setSelectedIndex(2) 라고 써주면 된다. 


10월 18, 2023

Websquare Grid 모든 행을 scroll 없이 볼 수 있는 법 - visibleRowNum

 Websquare에서 많이 사용되는 것 중 하나가 gridView이다. 데이터를 받아와서 여러 행을 테이블 형식으로 보여주는데, 이때 css를 어떻게 제어할지에 대해 고민을 해봐야 한다. 

height를 css 속성으로 설정을 하더라도, 원하는 데이터의 양이 해당 height를 넘게 되면 scroll이 생긴다. 


만약 스크롤 없이 사용하고 싶다면 "visibleRowNum" 이라는 속성을 사용하면 된다. 


"visibleRowNum" 속성을 사용하면 데이터 그리드에서 한 번에 보이는 행의 수를 제어할 수 있다. 이 속성은 그리드가 표현할 수 있는 행의 수를 조절하는 데 사용되고, "visibleRowNum"의 값은 다음과 같은 여러 가지 옵션 중 하나로 설정할 수 있다.


1. visibleRowNum="all"

  1. "all" 값으로 설정하면 그리드에서 모든 행을 한 번에 표시한다. 이렇게 하면 그리드가 스크롤 없이 모든 데이터를 화면에 표시할 수 있어서 자주 사용하는 옵션이다.


2. 특정 숫자값
  1. 숫자 값을 설정하면 그리드에서 한 번에 표시할 행의 수를 지정할 수 있다. 예를 들어 visibleRowNum="5"라고 속성을 설정하면 그리드에서 한 번에 5개의 행을 표시할 수 있고 데이터가 이 보다 많을 경우 사용자는 스크롤하여추가 행을 볼 수 있습니다.


10월 17, 2023

[Spring] VO 객체 복사하는 법 - BeanUtil.copyProperty + BeanUtil의 두 가지 library

Spring으로 코드를 짤 때 꼭 알아야 하는 것은 VO와 Bean의 개념이다. Spring으로 코드를 짜는 사람이면 모를 수 없는 두 개념이지만 개념에 대해 잘 익히지 않고 무작정 코드를 짜는 Spring 개발자들도 꽤나 있을 것이라고 생각한다.


1. VO의 개념

0 Spring에서 VO란 "Value Object"의 약자이다.

0 비즈니스 로직과 관련이 없는 데이터를 담는 데 사용하는 것이 중요한 개념이다.

0 VO는 주로 데이터를 전송하거나 저장하기 위해 사용되며, 그렇기 때문에 불변의, Read-Only, immutable 한 속성을 가진다.

0 VO의 주요 목적은 데이터를 묶어서 캡슐화하는 것이고, 그래서 자바라는 언어에서 더더욱 중요하게 활용되는 개념이다.


그렇다면 Bean의 정확한 개념은 무엇일까?

2. Bean의 개념

0 가장 쉽게 표현하면 Spring이 관리하는 객체를 의미한다.

0 Spring 컨테이너에 의해 instance화 되고 Application에서 사용되는 component, service, data access object 등과 같은 구성 요소를 의미한다.


3. Spring에서 VO 객체 복사하는 방법


0 Spring의 BeanUtils Class를 사용하면 VO 객체 간 속성을 복사할 수 있다.

0 주의할 사항으로는 BeanUtils Class가 어느 라이브러리를 import하냐에 따라 source와 target의 위치가 바뀐다는 것이다.

0 먼저 Spring Framework에서 사용되는 BeanUtils Class를 살펴보자


  1. 1. org.springframework.beans.BeanUtils (Spring Framework):

Spring Framework의 BeanUtils 클래스는 주로 Spring IoC(Inversion of Control) 컨테이너와 연계되어 사용되고 위에서 설명된 개념인 Bean과도 관련이 있다. 예시를 살펴보자


import org.springframework.beans.BeanUtils; 
public class BeanUtilsInSpringFramework
public static void main(String[] args)
// Spring BeanUtils 
Source source = new Source(); 
Target target = new Target(); 
 BeanUtils.copyProperties(source, target); 
// Spring Framework의 BeanUtils를 사용하여 빈(Bean) 간 속성 복사 
 } 
}


Spring에서는 위와 같이

BeanUtils.copyProperties(source, target); 

위 형식으로 source의 원본 객체를 target의 객체로 옮긴다.


이렇게 copyProperties 한 줄만 써주면 각각의 instance마다 set~ 형식으로 하나씩 옮기지 않아도 되서 코드의 가독성도 좋아진다.


2. org.apache.commons.beanutils.BeanUtils (Apache Commons BeanUtils)

반면 SpringFramework의 BeanUtils과는 헷갈려서는 안되는 것이 Apache Commons의 BeanUtils이다.

Apache Commons BeanUtils의 BeanUtils는 일반적인 Java 객체 간 속성 복사 및 변환을 수행하지만, Spring과는 별개의 Library이다. 따라서 Spring과 무관한 환경에서도 언제든 사용할 수 있다는 것이 장점이다.

import org.apache.commons.beanutils.BeanUtils; public class ApacheCommonsBeanUtils { public static void main(String[] args) { // Apache Commons 의 BeanUtils Source source = new Source(); Target target = new Target(); try { BeanUtils.copyProperties(target, source); } catch (Exception e) { e.printStackTrace(); } } }


Apache의 BeanUtils를 사용하면

BeanUtils.copyProperties(target, source);

SpringFramework의 BeanUtils를 사용할 때와 달리 target과 source의 위치가 달라진다는 것을 명심해야 한다.


따라서 BeanUtils를 사용할 때는 import된 library를 정확히 파악하고 target와 source의 위치를 정확하게 사용하는 것이 중요하다.