egovframework / egovframe-common-components Goto Github PK
View Code? Open in Web Editor NEW253 common functions that are reusable.
License: Apache License 2.0
253 common functions that are reusable.
License: Apache License 2.0
20년 10월 이후로 Repository 생성 시 Default 브랜치명이 master에서 main으로 변경되었다고 합니다.
사유는 "미국에서는 Black lives matter 운동이 큰 이슈가 되고 있다. 이러한 움직임의 연장으로 미국의 IT업계에는 이전부터 논란이 된 master/slave, blacklist/whitelist 와 같은 언어적인 문제들을 개선하려는 움직임이 많아지고 있다고 한다." 라고 합니다.
eGovFramework도 이러한 사회적 흐름에 발맞춰 움직여 브랜치명을 변경하면 좋겠습니다.
[ERROR] Failed to execute goal on project common: Could not resolve dependencies for project
egovframework:common:war:3.10.0: The following artifacts could not be resolved: ojdbc:ojdbc:jar:6-11, altibase:altibase-jdbc-
driver:jar:7.1.0, com.tmax.tibero:tibero-jdbc:jar:5.0: Could not find artifact ojdbc:ojdbc:jar:6-11 at specified path
/home/gon/workspace/egovframe-common-components/src/main/webapp/WEB-INF/lib/ojdbc6-11.2.0.3.jar -> [Help 1]
전자정부표준프레임워크 공통컴포넌트에서
통계/리포팅 부분에서 그래프로 표현시 막대그래프로만 적용하고 있습니다.
계속적으로 시스템사용자들의 요구사항이 다양해지고 요구사항이 많아 지고 있는 현황입니다.
하여. 시스템 개발시 별도의 차트 패키지를 구매하는 등
개발자들이 차트 적용이 어려움을 많이 느끼고 있는 부분입니다.
저도 이런 부분을 고민하고 다양한 차트를 적용한 노하우가 있습니다.
제가 그동안 고민하고 적용 노하우를 바탕으로 프리웨어 차트라이브러리를 적용하여 개선하는 방향으로
컨티리뷰트하는 방향으로 개선을 진행하고자 하오니 검토 부탁드립니다.
전자정부표준프레임워크 개발자들에게 더 좋은 도구가 될 수 있도록 신속히 진행되었으면 합니다.
감사합니다.
No response
이렇게 오류가 발생하는데 이유가 있을까요?
(다음은 예시이며, 내용을 덮어 써 주세요. The following is an example, please overwrite the content.)
No response
No response
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.430 s
[INFO] Finished at: 2022-07-11T22:09:21+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project common: Execution default-war of goal org.apache.maven.plugins:maven-war-plugin:2.2:war failed: Unable to load the mojo 'war' in the plugin 'org.apache.maven.plugins:maven-war-plugin:2.2' due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: Cannot access defaults field of Properties
PR 템플릿에서
마지막
"테스트 스크린샷 또는 캡쳐 영상 Test screenshots or captured video" 의 "캡쳐" 문구
Issues에 올리니 너무 거창한데요, 소소한 내용입니다. ^^;;
캡쳐 -> 캡처 또는 장면갈무리
오류를 발견했어요. I found an error.
Mysql jdbc driver 8.0.x를 사용할 경우 설문조사 > 설문참여 등록 화면에서 데이터처리 에러 발생
이전 버전 5.1.49를 사용하면 정상으로 구동합니다.
(다음은 예시이며, 내용을 덮어 써 주세요. The following is an example, please overwrite the content.)
Chrome
오류내용
Caused by: java.sql.SQLFeatureNotSupportedException: resultSet=net.sf.log4jdbc.ResultSetSpy@4a610edc, columnLabel=SBSCRB_DE, type=class java.time.LocalDateTime
at org.apache.commons.dbcp2.Jdbc41Bridge.getObject(Jdbc41Bridge.java:336) ~[commons-dbcp2-2.9.0.jar:2.9.0]
at org.apache.commons.dbcp2.DelegatingResultSet.getObject(DelegatingResultSet.java:773) ~[commons-dbcp2-2.9.0.jar:2.9.0]
at org.apache.commons.dbcp2.Jdbc41Bridge.getObject(Jdbc41Bridge.java:266) ~[commons-dbcp2-2.9.0.jar:2.9.0]
at org.apache.commons.dbcp2.DelegatingResultSet.getObject(DelegatingResultSet.java:773) ~[commons-dbcp2-2.9.0.jar:2.9.0]
at org.apache.ibatis.type.LocalDateTimeTypeHandler.getNullableResult(LocalDateTimeTypeHandler.java:38) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.type.LocalDateTimeTypeHandler.getNullableResult(LocalDateTimeTypeHandler.java:28) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:85) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:572) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:409) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:361) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:335) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:308) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:201) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:89) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:76) ~[mybatis-3.5.10.jar:3.5.10]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_302]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_302]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_302]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_302]
공통 컴포넌트 데이터처리를 SQL매퍼인 mybatis로 되어 있습니다. 한국의 SI에서는 유독 mybatis를 사용하는데 전세적 추세는 JPA로 가고 있습니다. 전자정부 프레임워크도 좀더 세계적인 오픈소스로 가려고 한다면 ORM 기반으로 데이터 처리를 가는것이 좋을않을까 생각합니다. 그러면 좀더 많은 개발자들이 전자정부 프레임워크 오픈소스에 참여 할것이라 생각합니다.
공통컴포넌트에서 제공하는 소스내용과 위키의 내용이 현행화가 안되어 있습니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:oauth
공통컴포넌트 내용
<dependency>
<groupId>com.github.scribejava</groupId>
<artifactId>scribejava-apis</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>com.github.scribejava</groupId>
<artifactId>scribejava-core</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.6</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.180</version>
</dependency>
OAuth 로그인 버튼 구현(EgovLoginUsr.jsp)
위키 내용
<table width="700">
<tr>
<td class="title_left"><img src="<c:url value='/images/egovframework/com/cmm/icon/tit_icon.gif'/>" width="16" height="16" hspace="3" align="middle" alt=""> OAuth 로그인</td>
</tr>
</table>
<form id="tw_signin" action="<c:url value="/signin/twitter"/>" method="POST" target="_blank">
<button type="submit" style="width:151px; height:26px; background-image: url('<c:url value="/images/egovframework/com/ext/oauth/twitter/sign-in-with-twitter-d.png"/>');"/>
</form>
<form id="disconnect" action="/connect/twitter" method="post">
<button type="submit">Disconnect from Twitter</button>
<input type="hidden" name="_method" value="delete" />
</form>
<form name="fb_signin" id="fb_signin" action="<c:url value="/signin/facebook"/>" method="POST" target="_blank">
<input type="hidden" name="scope" value="publish_stream,email,offline_access" />
<button type="submit" style="width:151px; height:26px; background-image: url('<c:url value="/images/egovframework/com/ext/oauth/facebook/sign-in-with-facebook.png"/>');"/>
</form>
<form id="disconnect" action="/connect/facebook" method="post">
<button type="submit">Disconnect from Facebook</button>
<input type="hidden" name="_method" value="delete" />
</form>
빅데이터 분석을 위한 오픈소스 R-studio 연계 기능을 추가해 보았으면 합니다.
R-studio 및 R-engine 은 강력한 빅데이터 분석도구이며 이를 활용할 경우
고가의 상용 통계 패키지를 도입하지 않아도 각종 통계 분석이 가능하여
비용 절감과 업무 효율 향상에 기여할 수 있을 것으로 생각합니다.
이와 더불어 데이터 시각화를 위한 표준 템플릿 프로젝트가 만들어졌으면 좋겠습니다.
감사합니다.
현재 MySQL이 기본 DB 로 제공되고 있습니다.
그러다 보니 일단 개발 환경에 MySql 서버가 설치되어 있어야 하고, Connection 정보를 설정해 주어야 합니다.
표준프레임워크 교육을 이수한 사용자나, 경험이 있는 사용자들은 금방 DB 설정을 찾아가 문제를 해결할 것입니다.
그러나 처음 전자정부 프레임워크를 접하는 사용자들이 빠르게 데모를 실행 시키려다보니 DB 설정 부분을 놓쳐 또하나의 진입 장벽이 되는 것 같습니다.
처음 접하는 사용자도 한번에 바로 실행 할 수 있는 Hsql 환경으로 설정 해 주면
전자정부 표준프레임워크를 처음 접하는 사용자들의 첫인상이나 인식 또한 개선되지 않을까 생각됩니다.
감사합니다.
공통컴포넌트 같이 규모가 있는은 소스의 규모가 큰 만큼 소스별 다양한 개발 스타일들이 적용되어 있습니다.
이에 가독성도 떨어 질 뿐더러 유지보수 개발자들의 업무를 가중시키는 문제가 있는바
이에 코딩 컨벤션을 정의하고 통일된 규칙을 적용하므로써 효율성을 높이도록 하면 좋겠습니다.
현재 egovframework.com.cmm.service.Globals 에서 공통으로 사용하는 프로퍼티 변수, 혹은 글로벌 변수들을 관리하고 있는데
개별 소스에서는 개별 프로퍼티의 호출이 이루어 지고 있는것 같습니다.
EgovProperties.getProperty()
아무래도 꼭 필요한 경우가 아니라면 static final의 전역변수로 관리하는 비용이 EgovProperties.getProperty() 메소드 호출 비용보다 경제적으로 사용 할 수 있을 것같습니다.
꼭 필요한 경우가 아니라면, 공통 혹은 전역으로 사용되고 있는 변수값들은 한곳에서 관리하는것이 관리 비용이 줄어들 것으로 보입니다.
README에 빌드방법이 소개되면 좋겠습니다.
현재는 대부분 RDBMS를 이용하는 컴포넌트만 있는걸로 보이는데,
요즘은 RDBMS 이외에도 NoSQL (예를 들어 MongoDB, Redis, Cassandra, ...) 도 꽤 사용합니다.
용도에 맞도록 사용한다면 기존의 RDBMS 보다 더 좋은 서비스가 가능할거라 봅니다.
주석 관리를 위한 표준 주석 템플릿
안녕하세요.
이번에 처음 컨트리뷰션으로 참여하게 됐습니다.
현재 1차적으로는 주석을 전체적으로 통일 또는 보완하는 것을 생각중입니다.
2차적으로 이백행 리더님이 알려주신 부분들을 조금씩 적용 하려고 합니다.
아직 표준프레임워크에대한 적응(?) 또는 익숙함이 없어서 가급적이면 로직이나 소스에 문제 없는 범위로 우선
저의 역할 잡아 보았습니다.
쉽게 생각하고(?) 주석을 정리하려고 보니.. 생각보다 주석에 대한 문서표준이나 내용이 소스별로 파일별로 조금씩 상이하고
제각각인거 같습니다.
1차적으로...
이클립스 메뉴 : Window -> Preferences -> Java -> Code Style -> Code Templates -> Comments -> Types
와 같은 이클립스 설정을 통해서 누구나 동일한 주석으로의 패턴을 정의해서 진행하게 하면 조금은 효율적이고
빠른 가독성이 가능하지 않을까 생각을합니다.
2차적으로는 현재 표준프레임워크에서 사용하는 주석에 대한 정확한 표준화가 없는 부분에 대하여 표준화를 요청드립니다.
아래는 예시입니다.
/**
EgovComIndexController 클래스
컴포넌트 설치 후 설치된 컴포넌트들을 IncludedInfo annotation을 통해 찾아낸 후
화면에 표시할 정보를 처리하는 Controller 클래스
notice :
개발시 메뉴 구조가 잡히기 전에 배포파일들에 포함된 공통 컴포넌트들의 목록성 화면에
URL을 제공하여 개발자가 편하게 활용하도록 하기 위해 작성된 것으로,
실제 운영되는 시스템에서는 적용해서는 안 됨
실 운영 시에는 삭제해서 배포해도 좋음
disclaimer :
운영시에 본 컨트롤을 사용하여 메뉴를 구성하는 경우 성능 문제를 일으키거나
사용자별 메뉴 구성에 오류를 발생할 수 있음
@author 공통컴포넌트 정**
@SInCE 2011.08.26
@Version 2.0.0
<< 개정이력(Modification Information) >>
수정일 수정자 수정내용
2011.08.26 정## 최초 생성
2011.09.16 서## 컨텐츠 페이지 생성
2011.09.26 이## header, footer 페이지 생성
2019.12.04 신## KISA 보안코드 점검 : Map<Integer, IncludedCompInfoVO> map를 지역변수로 수정
2020.07.08 신## 비밀번호를 수정한후 경과한 날짜 조회
2020.08.28 정## 표준프레임워크 v3.10 개선
*/
@controller
public class EgovComIndexController {
위와 같은 내용으로 제 개인적인 표준을 잡고 몇가지 파일에 대하여 통일된 내용으로 진행중입니다.
위에 내용에 대하여 추가/변경에 대하여 정의해 주시면 해당내용으로 진행하고자 합니다. 감사합니다.
이클립스에서 표현되는 내용 전달드립니다.(참고 부탁드립니다)
No response
모든 프로젝트들이 문서가 별도로 있긴 하겠지만,
README.md 만 보더라도 대충 어떻게 사용할지 내용을 보완하면 좋겠습니다.
프로젝트와 패키지들에 어떤 내용들이 있고, 어떻게 빌드하고 배포 하는 등의 내용도 있으면 더 좋겠지요.
이미 자세한 문서가 별도로 있다면 해당 링크라도 걸어주시기 바랍니다.
추후 확인 후 커밋하겠습니다
감사합니다!
오류를 발견했어요. I found an error.
resources
egovframework
mapper
com
cop
ncm
EgovQustnrRespondInfo_SQL_*.xml
OTHBC_AT 다음의 ','가 누락되어 회사명이 OTHBC_AT값으로 매핑됨
<select id="selectMyNcrdItemList" parameterType="egovframework.com.cop.ncm.service.NameCardVO" resultMap="ncrdList">
SELECT * FROM ( SELECT rownum rn, TB.* FROM (
SELECT
NCRD_ID, NM, NCRD_TRGTER_ID, OTHBC_AT, EXTRL_USER_AT, OTHBC_AT
CMPNY_NM, DEPT_NM, IDNTFC_NO, MIDDLE_MBTLNUM, END_MBTLNUM,
FRST_REGIST_PNTTM, FRST_REGISTER_ID
FROM
COMTNNCRD
WHERE
FRST_REGISTER_ID = #{frstRegisterId}
<if test="searchCnd == 0">AND
NM LIKE '%' || #{searchWrd} || '%'
</if>
<if test="searchCnd == 1">AND
CMPNY_NM LIKE '%' || #{searchWrd} || '%'
</if>
<if test="searchCnd == 2">AND
DEPT_NM LIKE '%' || #{searchWrd} || '%'
</if>
ORDER BY NM
) TB ) WHERE rn BETWEEN #{firstIndex} + 1 AND #{firstIndex} + #{recordCountPerPage}
</select>
(다음은 예시이며, 내용을 덮어 써 주세요. The following is an example, please overwrite the content.)
Others
테스트를 실행하면 다음과 같이 CMPNY_NM에 'Y'값이 매핑됨
[log4j]2023-08-25 11:00:10,423 INFO [jdbc.resultset] 2. ResultSet.getType() returned 1003
[log4j]2023-08-25 11:00:10,423 INFO [jdbc.resultset] 2. ResultSet.isClosed() returned false
[log4j]2023-08-25 11:00:10,423 INFO [jdbc.resultset] 2. ResultSet.next() returned true
[log4j]2023-08-25 11:00:10,424 INFO [jdbc.resultset] 2. ResultSet.getString(NCRD_ID) returned TEST_NCRD_9999999000
[log4j]2023-08-25 11:00:10,424 INFO [jdbc.resultset] 2. ResultSet.getString(NM) returned 테스터
[log4j]2023-08-25 11:00:10,424 INFO [jdbc.resultset] 2. ResultSet.getString(NCRD_TRGTER_ID) returned USRCNFRM_00000000000
[log4j]2023-08-25 11:00:10,424 INFO [jdbc.resultset] 2. ResultSet.getString(OTHBC_AT) returned Y
[log4j]2023-08-25 11:00:10,424 INFO [jdbc.resultset] 2. ResultSet.getString(EXTRL_USER_AT) returned N
@@@@@@@@
[log4j]2023-08-25 11:00:10,424 INFO [jdbc.resultset] 2. ResultSet.getString(CMPNY_NM) returned Y
@@@@@@@@
[log4j]2023-08-25 11:00:10,424 INFO [jdbc.resultset] 2. ResultSet.getString(DEPT_NM) returned 연구개발
[log4j]2023-08-25 11:00:10,424 INFO [jdbc.resultset] 2. ResultSet.getString(IDNTFC_NO) returned 070
[log4j]2023-08-25 11:00:10,424 INFO [jdbc.resultset] 2. ResultSet.getString(MIDDLE_MBTLNUM) returned 4448
[log4j]2023-08-25 11:00:10,425 INFO [jdbc.resultset] 2. ResultSet.getString(END_MBTLNUM) returned 2678
[log4j]2023-08-25 11:00:10,425 INFO [jdbc.resultset] 2. ResultSet.getString(FRST_REGIST_PNTTM) returned 2023-08-25
[log4j]2023-08-25 11:00:10,425 INFO [jdbc.resultset] 2. ResultSet.getString(FRST_REGISTER_ID) returned USRCNFRM_00000000000
[log4j]2023-08-25 11:00:10,425 INFO [jdbc.resultset] 2. ResultSet.isClosed() returned false
[log4j]2023-08-25 11:00:10,425 INFO [jdbc.resultset] 2. ResultSet.next() returned false
[log4j]2023-08-25 11:00:10,425 INFO [jdbc.resultset] 2. ResultSet.close() returned
[log4j]2023-08-25 11:00:10,426 INFO [jdbc.audit] 2. Connection.getMetaData() returned com.mysql.jdbc.JDBC4DatabaseMetaData@6944e53e
[log4j]2023-08-25 11:00:10,426 INFO [jdbc.audit] 2. PreparedStatement.getMoreResults() returned false
[log4j]2023-08-25 11:00:10,426 INFO [jdbc.audit] 2. PreparedStatement.getUpdateCount() returned -1
[log4j]2023-08-25 11:00:10,426 INFO [jdbc.audit] 2. PreparedStatement.close() returned
오류를 발견했어요. I found an error.
개인정보보호정책확인 등록페이지에서 등록이 안됨
validation이 textarea로 지정되어 있는데, ckeditor로 에디터가 변경이 되면서 textarea의 내용은 계속 비어 있어
오류가 발생하는 것으로 생각됩니다.
(다음은 예시이며, 내용을 덮어 써 주세요. The following is an example, please overwrite the content.)
510. 개인정보보호정책확인
메뉴를 클릭한다.Chrome
EgovIndvdlInfoPolicyList.jsp
아래 onclick 부분도 확인 필요합니다.
onclick="fn_userChk('USRCNFRM_00000000000')"
<div class="search_box" title="<spring:message code="common.searchCondition.msg" />"><!-- 이 레이아웃은 하단 정보를 대한 검색 정보로 구성되어 있습니다 -->
<ul>
<li>
<select title="<spring:message code="select.searchCondition"/>" name="searchCondition" class="select"><!-- 개인정보보호정책조회 조건 -->
<option value=''>--<spring:message code="input.select"/>--</option><!-- 선택하세요 -->
<option value='INDVDL_INFO_POLICY_NM' <c:if test="${searchCondition == 'INDVDL_INFO_POLICY_NM'}">selected</c:if>><spring:message code="ussSamIpm.indvdlInfoPolicyList.indvdlInfoPolicyNm"/></option><!-- 개인정보보호정책명 -->
<option value='INDVDL_INFO_POLICY_CN' <c:if test="${searchCondition == 'INDVDL_INF_POLICY_CN'}">selected</c:if>><spring:message code="ussSamIpm.indvdlInfoPolicyList.indvdlInfoPolicyCn"/></option><!-- 개인정보보호정책내용 -->
</select>
<input class="s_input2 vat" type="text" name="searchKeyword" value="${searchVO.searchKeyword}" size="25" title="<spring:message code="title.search"/>" /><!-- 검색어 -->
<input class="s_btn" type="submit" value="<spring:message code="button.inquire" />" title="<spring:message code="button.inquire" />" onclick="fn_egov_search_IndvdlInfoPolicy(); return false;" />
<span class="btn_b"><a href="<c:url value='/uss/sam/ipm/registIndvdlInfoPolicy.do' />" onclick="fn_userChk('USRCNFRM_00000000000')"><spring:message code="button.create" /></a></span>
</li>
</ul>
</div>
EgovIndvdlInfoPolicyRegist.jsp
아래 주석 부분 확인 부탁드립니다.
varFrom.onsubmit();
******************************************************** */
function fn_egov_save_IndvdlInfoPolicy(){
var varFrom = document.indvdlInfoPolicy;
// varFrom.onsubmit();
if(confirm("<spring:message code="common.save.msg" />")){
varFrom.action = "<c:url value='/uss/sam/ipm/registIndvdlInfoPolicy.do' />";
if(!validateIndvdlInfoPolicy(varFrom)){
return;
}else{
varFrom.submit();
}
}
}
단순히 jar dependency 만을 제공하는 방식보다는
egovframe-spring-boot-starter 형태로 제공하는 것이 프레임워크 구성에도 적합하고 현업에서 사용하기 편리 할 것으로 생각됩니다.
autoconfiguration 방식의 구성이었으면 egovframework 발전에 큰 도움이 될 것 같습니다.
.gitignore 에 target 폴더 추가가 필요
코드를 수정하면 전체적으로 수정할 부분이 너무 많아져서 이슈로 남깁니다.
egovframework.com.utl.sys.htm.service 패키지에 보면
HttpMntrngScheduling 클래스의 monitorHttp 메소드에서 등록된 사이트들이 정상인지
체크하는 부분이 있습니다. httpSttusCd = HttpMntrngChecker.getPrductStatus(siteUrl);
https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html
위 링크에서
sun.net.client.defaultConnectTimeout (default: -1)
sun.net.client.defaultReadTimeout (default: -1)
두 프로퍼티를 보면 기본값이 -1 로 되어 있는데 이것은 서버가 응답을 준비하는데 오래 걸릴 경우 경우,
응답이 올때까지 계속 대기 상태에 빠질 위험이 있습니다.
따라서 현재의 체크 방식 보다는 적절한 타임아웃 설정을 하고, 서버의 HTTP 응답 코드 또는 예외 발생 여부로
판별하도록 전체 수정하는 것이 좋아 보입니다. 아래 링크를 참고하시면 좋습니다.
https://www.baeldung.com/httpclient-timeout
위의 문제는 실제로 타임아웃 설정이 없는 HTTP Client 코드로 연동 하는 사이트에서,
A->B->C 이런 식의 연쇄 장애로 이어져 결국 모든 시스템이 문제가 생기는 대형 장애로 되었던 사례입니다.
안녕 하세요~
공통컴퍼넌트를 사용할 때 처음에 가장 힘든점이 테이블명이 너무 약어로 되어 있어서 알아보기가 힘들었습니다.
이제는 어느정도 익숙해져서 괜찮은데 테이블 이름을 컬럼명 처럼 스네이크 표기법 혹은 좀더 사용자가 식별하기 쉽게 해주시면 좋겠습니다.
현재 표준프레임워크의 초기화 과정에서 EgovWebServletContextListener.setEgovProfileSetting()이 사용되고 있습니다.
그런데 내부 로직을 뜻어보면 컨텍스트의 설정과정에서 시스템의 spring.profiles.active 를 식별 항목으로 사용하고 있는 듯 합니다.
System.setProperty("spring.profiles.active", EgovProperties.getProperty("Globals.DbType")+","+EgovProperties.getProperty("Globals.Auth"));
그러나 이는 Spring 자체에서 사용하는 profile 또한 이와 같은 key 값을 사용하고 있는바,
build 시에 spring.profiles.active 항목을 사용하고 있다면 예기치 못한 결과들이 발생 할 것 같습니다.
참고
표준프레임워크의 컨텍스트 식별을 위해서라면, 기존 표준프레임워크에서 내에서 사용하는 spring.profiles.active 프로퍼티를 확인 후 영향도를 확인하여 key의 명칭을 변경 해야 할 것 같습니다.
오류를 발견했어요. I found an error.
온라인POLL 관리목록에서 등록된 온라인POLL 을 클릭시에 데이터 처리 에러 오류 출력
(다음은 예시이며, 내용을 덮어 써 주세요. The following is an example, please overwrite the content.)
<select id="selectOnlinePollItem" resultType="egovMap">
SELECT
POLL_ID,
POLL_IEM_ID,
POLL_IEM_NM,
FRST_REGISTER_ID,
DATE_FORMAT(FRST_REGIST_PNTTM,'%Y-%m-%d') AS FRST_REGIST_PNTTM,
LAST_UPDUSR_ID,
LAST_UPDT_PNTTM <-- 해당 라인 삭제
DATE_FORMAT(LAST_UPDT_PNTTM,'%Y-%m-%d') AS LAST_UPDT_PNTTM
FROM COMTNONLINEPOLLIEM
WHERE 1=1
AND POLL_ID = #{pollId}
ORDER BY POLL_IEM_NM DESC
</select>
Chrome
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(LAST_UPDT_PNTTM,'%Y-%m-%d') AS LAST_UPDT_PNTTM
FROM COMTNONLINEPOLLIEM
WHER' at line 9
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_202]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_202]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_202]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_202]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:403) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at com.mysql.jdbc.Util.getInstance(Util.java:386) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1915) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1254) ~[mysql-connector-java-5.1.49.jar:5.1.49]
at net.sf.log4jdbc.PreparedStatementSpy.execute(PreparedStatementSpy.java:417) ~[log4jdbc-1.2.jar:?]
at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:94) ~[commons-dbcp2-2.9.0.jar:2.9.0]
at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:94) ~[commons-dbcp2-2.9.0.jar:2.9.0]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:89) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) ~[mybatis-3.5.10.jar:3.5.10]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_202]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_202]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_202]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_202]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ~[mybatis-spring-2.0.7.jar:2.0.7]
... 139 more
동영상 업로드 및 보기 기능이 있으면 좋겠습니다
요즘은 동영상 미디어를 많이 사용하는 추세인데 동영상 업로드 및 보기 기능이 없어보입니다.
예를 들어 '안전신문고' 라는 앱이 있는데 불법주차나 생활 속 안전 사고의 위험이 있는 것을 사진이나 영상으로 찍어서 올릴 수 있습니다.
그런데 공통 컴포넌트에는 동영상 업로드 및 보기 기능이 없어보여서 의견 드립니다.
표준프레임워크 오픈 커뮤니티 게시판(https://open.egovframe.org/oc/support/bbs.do) 에서도
마찬가지로 동영상 업로드 및 보기를 할 수 없어 많이 불편합니다.
힘드시겠지만 개선 되면 좋겠습니다. 감사합니다.
No response
No response
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.