[Nexacro] 넥사크로 N + SpringBoot 연동하기 2 - 프로젝트 설정 및 연동
Uiadapter
넥사크로의 Uiadapter를 사용하려고 gradle을 통해 라이브러리를 다운하려 했지만 아직 자사의 Nexus 서버가 불안정해서 Gradle을 통한 자동 다운은 못한다고 한다.. - 20220509 기준
그래서 플레이넥사크로에서 다운해야 한다. 해당 게시글 제일 하단에 라이브러리 파일들이 있다. 다운하고 압축 푼 다음에 프로젝트 최상위 경로에 'libs' 폴더를 만들고 압축 푼 라이브러리 파일들을 옮겨주자.
그리고 맨 위에 있는 nexacro-xapi-java-1.0.0.jar 파일은 기술지원센터에서 따로 받아야된다. 저거 없으니까 설정할 때 에러남;
참고로 파일을 다운하기 위해 로그인이 필요하다.
대메뉴 Product > Nexacro N > Download > Server [API,XENI]메뉴를 타고 들어가면 있다.
저 파일 역시 압축을 풀고 libs에 넣어준다.
그리고 build.gradle에 아래 코드 추가.
//외부 libs 추가
implementation fileTree(dir: 'libs', includes: ['*.jar'])
그리고 인텔리제이 우측에 Gradle을 클릭 후 refresh한다.
그러면 저기 폴더에는 안 보이는데 쨌든 import 해서 uiadapter를 사용할 수 있다.
넥사크로 프로젝트 생성 및 설정
라이선스가 필요하다. 라이선스는 기술지원센터에서 제공받을 수 있다.
넥사크로를 실행하고 새로운 프로젝트를 만든다. 나는 testProject라 명명했다. 중요한 건 경로다.
프로젝트\src\main
바로 이 위치에 놔주자.
그리고 프로젝트가 생성이 되었으면 Generate path를 지정해야 한다.
넥사크로 상단에 Tools > Options... 클릭
Generate 클릭 후 Generate Path를 지정해주면 된다. static의 하위 폴더로 넥사크로 프로젝트와 다른 이름은 지정 안 해봐서 이름을 다르게 지정해도 되나 모르겠다. 안전하게 넥사크로의 프로젝트와 똑같은 이름의 폴더 생성 후 지정해주면 된다.
src\main\resources\static\testProject
Path 지정 후 넥사크로 상단 메뉴 Generate > Regenerate > Application을 클릭해준다.
그리고 TypeDefinition > Services 더블클릭
svc와 nexacrolib를 추가해주자. nexacrolib는 NexacroConfig 설정할 때 계속 밑줄 쳐져서 보기 싫어가지고 추가했다.
그리고 FrameBase의 Form_Work에 버튼을 하나 추가한다.
그리고 스크립트 작성
this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
alert("연동 테스트 완료");
};
프로젝트 설정
이제 인텔리제이에서 설정 파일들을 만들어줘야 한다.
WebAppConfig
@Configuration
public class WebAppConfig implements WebMvcConfigurer {
// view Resolver 경로 설정
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/jsp", ".jsp");
}
// 루트 "/" 접속 시 index 페이지로 포워딩
@Override
@Order(Ordered.HIGHEST_PRECEDENCE + 1)
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
}
// Web Resource 경로 설정
@Override
@Order(Ordered.HIGHEST_PRECEDENCE + 2)
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/_resource_/**").addResourceLocations("classpath:/static/testProject/_resource_/");
registry.addResourceHandler("/FrameBase/**").addResourceLocations("classpath:/static/testProject/FrameBase/");
registry.addResourceHandler("/nexacrolib/**").addResourceLocations("classpath:/static/testProject/nexacrolib/");
registry.addResourceHandler("/*.json").addResourceLocations("classpath:/static/testProject/");
registry.addResourceHandler("/*.html").addResourceLocations("classpath:/static/testProject/");
registry.addResourceHandler("/*.js").addResourceLocations("classpath:/static/testProject/");
}
// 메세지 소스 생성
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
//메세지 프로퍼티 팔일의 위치와 이름을 지정
source.setBasename("classpath:/messages/message");
//기본 인코딩을 지정한다.
source.setDefaultEncoding("UTF-8");
//프로퍼티 파일의 변경을 감지할 시간 간격을 지정한다.
source.setCacheSeconds(60);
//없는 메세지일 경우 예외를 발생시키는 대신 코드를 기본 메세지로 한다.
source.setUseCodeAsDefaultMessage(true);
return source;
}
// 변경된 언어 정보를 기억할 로케일 리졸버 생성
// 여기서는 세션에 저장하는 방식 사용
@Bean
public SessionLocaleResolver localeResolver() {
return new SessionLocaleResolver();
}
//
// // 언어 변경을 위한 인터셉터를 생성
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang");
return interceptor;
}
// 인터셉터 등록
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
내가 하나하나 다 작성한 건 아니고 플레이넥사크로에 있는 설정들을 참고했다. 이 파일에서 중요한 건 Web Resource 경로 설정 부분인데 static 다음 폴더명을 꼭 확인해야 한다.
NexacroConfig
@Configuration
public class NexacroConfig extends WebAppConfig implements WebMvcRegistrations {
@Bean
@Lazy(false)
public ApplicationContextProvider applicationContextProvider() {
return new ApplicationContextProvider();
}
@Override
public RequestMappingHandlerAdapter getRequestMappingHandlerAdapter() {
return new NexacroRequestMappingHandlerAdapter();
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
NexacroMethodArgumentResolver nexacroResolver = new NexacroMethodArgumentResolver();
resolvers.add(nexacroResolver);
super.addArgumentResolvers(resolvers);
}
@Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
NexacroHandlerMethodReturnValueHandler returnValueHandler = new NexacroHandlerMethodReturnValueHandler();
NexacroFileView nexacroFileView = new NexacroFileView();
NexacroView nexacroView = new NexacroView();
nexacroView.setDefaultContentType(PlatformType.CONTENT_TYPE_XML);
nexacroView.setDefaultCharset("UTF-8");
returnValueHandler.setView(nexacroView);
returnValueHandler.setFileView(nexacroFileView);
handlers.add(returnValueHandler);
super.addReturnValueHandlers(handlers);
}
/**
* 넥사크로플랫폼 에러 처리 ExceptionResolver 등록
*/
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
NexacroView nexacroView = new NexacroView();
nexacroView.setDefaultContentType(PlatformType.CONTENT_TYPE_XML);
nexacroView.setDefaultCharset("UTF-8");
NexacroMappingExceptionResolver nexacroException = new NexacroMappingExceptionResolver();
nexacroException.setView(nexacroView);
nexacroException.setShouldLogStackTrace(true);
nexacroException.setShouldSendStackTrace(true);
nexacroException.setDefaultErrorMsg("fail.common.msg");
nexacroException.setMessageSource(messageSource());
nexacroException.setOrder(1);
resolvers.add(nexacroException);
super.configureHandlerExceptionResolvers(resolvers);
}
}
이 설정 코드도 역시 플레이넥사크로에서 참고했고, 불필요한 코드는 최대한 제거했다.
설정 후 서버 라이선스 파일을 src\main\resources에 추가한다.
그리고 서버 시작하고 크롬에 localhost:8080으로 접속하면
페이지가 잘 뜬다..^^
끝!
- 이전 글
- 참고