글로벌프로퍼티스 정리 및 추가

코어 세팅 변경
알림톡 발송 개발
This commit is contained in:
leejunho 2025-11-25 14:24:59 +09:00
parent 9932a1eb0e
commit fba9f82725
21 changed files with 267 additions and 152 deletions

View File

@ -14,6 +14,7 @@ import kcc.com.utl.user.service.CheckLoginUtil;
import kcc.kccadr.xxx.service.XxxService;
import kcc.kccadr.xxx.service.XxxVO;
import kcc.ve.cmm.crt.CertPhoneRequestUtill;
import kcc.ve.cmm.sendAt.SendService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.*;
@ -87,6 +88,8 @@ public class XxxWebController {
@Resource(name = "checkLoginUtil")
private CheckLoginUtil checkLoginUtil;
@Resource(name = "SendService")
private SendService sendService;
/**
* XXX 목록 화면
@ -314,5 +317,22 @@ public class XxxWebController {
modelAndView.addObject("result", result);
return modelAndView;
}
/**
* XXX YYYY(처리) Ajax 처리
*/
@RequestMapping("/web/kccadr/xxx/atTest.do")
public String atTest() throws Exception {
Map<String, String> chihwan = new HashMap<>();
chihwan.put("title", "이준호테스트");
chihwan.put("siteUrl", "www.naver.com");
// sendService.sendAt("01030266269", "TEMPLATE_EDU_SUBMIT", chihwan);
sendService.sendSms("01030266269", "테스트문자제목", "테스트 내용", "SMS");
return null;
}
}

View File

@ -10,13 +10,6 @@ public class PpurioGlobalSet {
private static String pw;
private static String host;
private static String senderKey;
private static String templateCode1;
private static String templateCode2;
private static String templateCode3;
private static String templateCode4;
private static String templateCode5;
private static String templateCode6;
private static String from;
@Value("#{globalSettings['ppurio.id']}")
@ -24,7 +17,7 @@ public class PpurioGlobalSet {
PpurioGlobalSet.id = id;
}
public static String getId() {
public String getId() {
return id;
}
@ -33,7 +26,7 @@ public class PpurioGlobalSet {
PpurioGlobalSet.pw = pw;
}
public static String getPw() {
public String getPw() {
return pw;
}
@ -42,7 +35,7 @@ public class PpurioGlobalSet {
PpurioGlobalSet.host = host;
}
public static String getHost() {
public String getHost() {
return host;
}
@ -51,70 +44,16 @@ public class PpurioGlobalSet {
PpurioGlobalSet.senderKey = senderKey;
}
public static String getSenderKey() {
public String getSenderKey() {
return senderKey;
}
@Value("#{globalSettings['ppurio.templateCode1']}")
public void setTemplateCode1(String templateCode1) {
PpurioGlobalSet.templateCode1 = templateCode1;
}
public static String getTemplateCode1() {
return templateCode1;
}
@Value("#{globalSettings['ppurio.templateCode2']}")
public void setTemplateCode2(String templateCode2) {
PpurioGlobalSet.templateCode2 = templateCode2;
}
public static String getTemplateCode2() {
return templateCode2;
}
@Value("#{globalSettings['ppurio.templateCode3']}")
public void setTemplateCode3(String templateCode3) {
PpurioGlobalSet.templateCode3 = templateCode3;
}
public static String getTemplateCode3() {
return templateCode3;
}
@Value("#{globalSettings['ppurio.templateCode4']}")
public void setTemplateCode4(String templateCode4) {
PpurioGlobalSet.templateCode4 = templateCode4;
}
public static String getTemplateCode4() {
return templateCode4;
}
@Value("#{globalSettings['ppurio.templateCode5']}")
public void setTemplateCode5(String templateCode5) {
PpurioGlobalSet.templateCode5 = templateCode5;
}
public static String getTemplateCode5() {
return templateCode5;
}
@Value("#{globalSettings['ppurio.templateCode6']}")
public void setTemplateCode6(String templateCode6) {
PpurioGlobalSet.templateCode6 = templateCode6;
}
public static String getTemplateCode6() {
return templateCode6;
}
@Value("#{globalSettings['ppurio.from']}")
public void setFrom(String from) {
PpurioGlobalSet.from = from;
}
public static String getFrom() {
public String getFrom() {
return from;
}

View File

@ -50,8 +50,7 @@ public class SendAtVO implements Serializable {
private String type;
@JsonIgnore
private String expired;
private String account;
private String refkey;
private String from;
@ -78,7 +77,33 @@ public class SendAtVO implements Serializable {
private String senderkey;
private String templatecode;
private String message;
}
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class resend {
private String first;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class recontent {
private Lms lms;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class Lms {
private String message;
}
}

View File

@ -46,7 +46,4 @@ public interface SendService {
void updateSendSet(SendSmsVO sendSmsVO) throws Exception;
EgovMap selectTEMPLATE_APP_BAEJUNG(EgovMap egovMap) throws Exception;
List<EgovMap> selectTEMPLATE_BOTH_CHULSUK(EgovMap egovMap) throws Exception;
}

View File

@ -27,12 +27,4 @@ public class SendDAO extends EgovComAbstractDAO {
public void updateSendSet(SendSmsVO sendSmsVO) throws Exception{
update("sendDAO.updateSendSet", sendSmsVO);
}
public EgovMap selectTEMPLATE_APP_BAEJUNG(EgovMap egovMap) {
return (EgovMap) select("sendDAO.selectTEMPLATE_APP_BAEJUNG", egovMap);
}
public List<EgovMap> selectTEMPLATE_BOTH_CHULSUK(EgovMap egovMap) {
return (List<EgovMap>) list("sendDAO.selectTEMPLATE_BOTH_CHULSUK", egovMap);
}
}

View File

@ -135,16 +135,6 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
sendDAO.updateSendSet(sendSmsVO);
}
@Override
public EgovMap selectTEMPLATE_APP_BAEJUNG( EgovMap egovMap) throws Exception{
return sendDAO.selectTEMPLATE_APP_BAEJUNG(egovMap);
}
@Override
public List<EgovMap> selectTEMPLATE_BOTH_CHULSUK(EgovMap egovMap) throws Exception{
return sendDAO.selectTEMPLATE_BOTH_CHULSUK(egovMap);
}
/**
* @methodName : timeDiffBefore
* @author : JunHo Lee
@ -179,7 +169,6 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
String input = null;
PpurioGlobalSet ppurioGlobalSet = new PpurioGlobalSet();
try {
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
@ -288,7 +277,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
try {
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(X509Certificate[] chain, String authType) { }
@ -327,7 +316,7 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
JSONObject json = new JSONObject();
json.put("account", ppurioGlobalSet.getId());
json.put("type", sendSmsVO.getType().toLowerCase());
json.put("from", "15881490");
json.put("from", ppurioGlobalSet.getFrom());
json.put("to", sendSmsVO.getTo());
json.put("content", content);
json.put("refkey", "test1234");
@ -394,9 +383,9 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
PpurioGlobalSet ppurioGlobalSet = new PpurioGlobalSet();
try {
System.out.println("test");
/** SSL 인증서 무시 : 비즈뿌리오 API 운영을 접속하는 경우 해당 코드 필요 없음 **/
if(ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
if(!ppurioGlobalSet.getHost().contains("https://api.bizppurio.com")) {
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(X509Certificate[] chain, String authType) { }
@ -480,14 +469,13 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
Map<String, String[]> requiredPlaceholders = new HashMap<>();
switch (at.getTemplatecode()) {
case "TEMPLATE_APP_JUBSU": // 신청인_접수확인_1
/*case "TEMPLATE_APP_JUBSU": // 신청인_접수확인_1
at.setTemplatecode("bizp_2024112810423519814410026");
content = "[한국공정거래조정원] \r\n"
+ "귀사(하)의 조정신청이 접수 완료되었습니다.\r\n"
+ "향후 담당부서 및 담당자가 배정될 예정입니다.";
break;
case "TEMPLATE_APP_BAEJUNG": // 신청인_담당자배정_2
// at.setTemplatecode("bizp_2024112810423516931294012");
at.setTemplatecode("bizp_2024121915475924487679960");
content = "[한국공정거래조정원]\r\n"
+ "귀사(하)가 #{respondent}을(를) 상대로 신청한 사건의 사건번호는 #{caseNo}, 담당자는 #{team}팀 #{examiner} 조사관(유선전화:#{tel}, 메일주소 #{email})입니다.\r\n"
@ -502,7 +490,6 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "cfrnc", "tel", "email"});
break;
case "TEMPLATE_BOTH_CHULSUK": // 양당사자_출석요구 n차
// at.setTemplatecode("bizp_2024112810492916931760451");
at.setTemplatecode("bizp_2025011515420924487914030");
content = "[한국공정거래조정원]\r\n"
+ "귀사(하)가 진행 중인 분쟁조정 사건 [사건번호 #{caseNo}]의 출석조사(#{nCha}차) 기일이 확정되었습니다. \r\n"
@ -511,23 +498,25 @@ public class SendServiceImpl extends EgovAbstractServiceImpl implements SendServ
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "nCha"});
break;
case "TEMPLATE_BOTH_TONGJI": // 양당사자_통지
// at.setTemplatecode("bizp_2024112810492916931854671");
at.setTemplatecode("bizp_2025011515425124487733149");
content = "[한국공정거래조정원]\r\n"
+ "귀사(하)가 진행 중인 분쟁조정 사건 [사건번호 #{caseNo}]에 대한 #{cfrnc}분쟁조정협의회 의결이 완료되었습니다.\r\n"
+ "한국공정거래조정원 분쟁조정사건처리시스템에서 확인해주시기 바랍니다.\r\n"
+ "https://fairnet.kofair.or.kr";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "cfrnc"});
break;
case "TEMPLATE_APP_BOWAN": // 신청인_보완요구 n차
// at.setTemplatecode("bizp_2024112810522719814540186");
at.setTemplatecode("bizp_2025011515404892092190436");
break;*/
case "TEMPLATE_EDU_SUBMIT": // 교육신청
at.setTemplatecode("bizp_2025112016051950432354168");
content =
"[한국공정거래조정원]\r\n"
/*"[한국공정거래조정원]\r\n"
+ "귀사(하)가 신청한 분쟁조정 신청사건(사건번호 #{caseNo})에 대한 보완(#{nCha}차)이 필요합니다.\r\n"
+ "향후 담당 조사관이 공문 등을 통해 연락드릴 예정입니다. \r\n"
+ "https://fairnet.kofair.or.kr";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"caseNo", "nCha"});
+ "https://fairnet.kofair.or.kr";*/
"[지식재산 보호 교육]\r\n"
+ "귀하가 신청하신 [#{title}] 교육과정이 정상적으로 신청되었습니다.\r\n"
+ "자세한 내용은 한국지식재산보호원 지식재산 보호 교육시스템에서 확인해주시기 바랍니다.\r\n"
+ "#{siteUrl}";
requiredPlaceholders.put(at.getTemplatecode(), new String[]{"title", "siteUrl"});
break;
}

View File

@ -77,3 +77,12 @@ globals.certPhone.clientId=5a2a72e2-16ce-420c-8816-57b3dda0e231
globals.certPhone.srvNo=001003
globals.certPhone.accessToken=994b5d96-3788-4239-a5b0-a0ba2e0cf089
globals.certPhone.stosUrl=https://pcc.siren24.com/servlet/StoS
# ===========================
# \uBFCC\uB9AC\uC624 \uC54C\uB9BC\uD1A1, \uBB38\uC790 \uBC1C\uC1A1
# ===========================
ppurio.id=ipedu
ppurio.pw=a12711271!!
ppurio.host=https://api.bizppurio.com
ppurio.senderKey=2f3b0bb2cc106a3d98f248c85ac5d5376505f553
ppurio.from=16701271

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/ve/cmm/sendAt/Send_SQL_Postgresql.xml"/>
</sqlMapConfig>

View File

@ -0,0 +1,152 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Send">
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="sendAtVO" type="kcc.ve.cmm.sendAt.SendAtVO"/>
<typeAlias alias="sendSmsVO" type="kcc.ve.cmm.sendAt.SendSmsVO"/>
<select id="sendDAO.selectToken" resultClass="sendAtVO">
SELECT
A.ACCESSTOKEN,
A.TYPE,
A.EXPIRED
FROM
ppurio_token A
</select>
<update id="sendDAO.updateToken" parameterClass="sendAtVO">
UPDATE ppurio_token
SET
ACCESSTOKEN = #accesstoken#,
TYPE = #type#,
EXPIRED = #expired#
</update>
<!--<select id="sendDAO.selectTEMPLATE_APP_BAEJUNG" parameterClass="egovMap" resultClass="egovMap">
SELECT
LISTAGG(A.RESPONDENT_COMPANY, ',') WITHIN GROUP (ORDER BY A.RESPONDENT_COMPANY) AS RESPONDENT_COMPANY,
A.CASE_NO AS CASE_NO,
B.RCEPT_NO AS RCEPT_NO,
CASE TO_CHAR(C.MEMBER_DEPT)
WHEN '1001000000' THEN
'한국공정거래조정원'
WHEN '1002000000' THEN
'운영지원팀'
WHEN '1003000000' THEN
'분쟁조정실'
WHEN '1004000000' THEN
'공정약관1팀'
WHEN '1005000000' THEN
'가맹대리점유통팀'
WHEN '1006000000' THEN
'건설하도급팀'
WHEN '1007000000' THEN
'제조하도급팀'
WHEN '1008000000' THEN
'약관1팀'
WHEN '1009000000' THEN
'대리점팀'
WHEN '1010000000' THEN
'민원상담센터'
WHEN '1020000000' THEN
'관리팀'
WHEN '1030000000' THEN
'유통팀'
WHEN '1040000000' THEN
'플랫폼1팀'
WHEN '1041000000' THEN
'약관2팀'
WHEN '1042000000' THEN
'플랫폼2팀'
WHEN '1043000000' THEN
'공정약관2팀'
ELSE
'기타'
END AS MEMBER_DEPT,
C.MEMBER_NAME AS MEMBER_NAME,
C.MEMBER_TEL AS MEMBER_TEL,
C.MEMBER_EMAIL1
|| '@'
|| C.MEMBER_EMAIL2 AS MEMBER_EMAIL,
D.CONFERENCE_NAMES
FROM
C_CASERESPONDENT A
LEFT OUTER JOIN C_MASTER B
ON A.CASE_NO = B.CASE_NO
LEFT OUTER JOIN T_MEMBER C
ON B.CASE_EXAMINER = C.MEMBER_ID
LEFT OUTER JOIN (
SELECT
A.CFRNC_NO,
A.CONFERENCE_NAMES, B.CASE_NO
FROM
C_CFRNCMANAGE A
INNER JOIN (
SELECT
AA.CFRNC_NO,
AA.CASE_NO
FROM
(
SELECT
A.CFRNC_NO,
A.CASE_NO
FROM
C_ENDMTR A
UNION
ALL
SELECT
B.CFRNC_NO,
B.CASE_NO
FROM
C_DLBRTMTR B
UNION
ALL
SELECT
C.CFRNC_NO,
C.CASE_NO
FROM
C_ENDJOSU C
) AA
) B
ON A.CFRNC_NO = B.CFRNC_NO
) D
ON D.CASE_NO = A.CASE_NO
WHERE
A.CASE_NO = #caseNo#
GROUP BY
A.CASE_NO,
B.RCEPT_NO,
C.MEMBER_DEPT,
C.MEMBER_NAME,
C.MEMBER_TEL,
C.MEMBER_EMAIL1,
C.MEMBER_EMAIL2,
D.CONFERENCE_NAMES
</select>
<select id="sendDAO.selectTEMPLATE_BOTH_CHULSUK" parameterClass="egovMap" resultClass="egovMap">
SELECT
A.SEQ_NO AS SEQ_NO,
A.TEL AS TEL
FROM
C_CASEAPPLCNT A
WHERE
A.CASE_NO = #caseNo#
UNION
ALL
SELECT
B.SEQ_NO AS SEQ_NO,
B.TEL AS TEL
FROM
C_CASERESPONDENT B
WHERE
B.CASE_NO = #caseNo#
</select>-->
</sqlMap>

View File

@ -507,12 +507,7 @@
</td>
</tr>
<tr>
<c:if test="${info.prcsDiv eq 10}">
<th scope="row">교육장소</th>
</c:if>
<c:if test="${info.prcsDiv ne 10}">
<th scope="row">관련URL</th>
</c:if>
<th scope="row">교육장소</th>
<td class="addPro_wrap">
<c:out value="${info.eduPlace}"/>
</td>

View File

@ -39,8 +39,8 @@
fnSelectDivAndCn($(this).val());
});
var prcsDiv = "<c:out value='${info.prcsDiv }' />";
prcsDivChk(prcsDiv)
/*var prcsDiv = "<c:out value='${info.prcsDiv }' />";
prcsDivChk(prcsDiv)*/
$("#filebutton").on('click', function(){
$("#file_temp").click();
@ -65,15 +65,15 @@
* 10:대면 20:비대면
* 10:대면 20:비대면
* */
function prcsDivChk(prcsDiv){
/*function prcsDivChk(prcsDiv){
console.log('prcsDiv : ', prcsDiv);
if(prcsDiv==10){
$('#tr_eduPlace #thId').text('교육장소');
}else{
$('#tr_eduPlace #thId').text('관련URL');
}
}
}*/
// div codeNm 가져오는 function

View File

@ -46,8 +46,8 @@
}
});
var prcsDiv = "<c:out value='${prcsDiv }' />";
prcsDivChk(prcsDiv);
/*var prcsDiv = "<c:out value='${prcsDiv }' />";
prcsDivChk(prcsDiv);*/
$("#filebutton").on('click', function(){
@ -67,14 +67,14 @@
* 10:대면 20:비대면
* 10:대면 20:비대면
* */
function prcsDivChk(prcsDiv){
/*function prcsDivChk(prcsDiv){
if(prcsDiv==10){
$('#tr_eduPlace #thId').text('교육장소');
}else{
$('#tr_eduPlace #thId').text('관련URL');
}
}
}*/
function fncSave(){

View File

@ -495,12 +495,7 @@
</td>
</tr>
<tr>
<c:if test="${info.prcsDiv eq 10}">
<th scope="row">교육장소</th>
</c:if>
<c:if test="${info.prcsDiv ne 10}">
<th scope="row">관련URL</th>
</c:if>
<th scope="row">교육장소</th>
<td class="addPro_wrap">
<c:out value="${info.eduPlace}"/>
</td>

View File

@ -39,8 +39,8 @@
fnSelectDivAndCn($(this).val());
});
var prcsDiv = "<c:out value='${info.prcsDiv }' />";
prcsDivChk(prcsDiv)
/*var prcsDiv = "<c:out value='${info.prcsDiv }' />";
prcsDivChk(prcsDiv)*/
$("#filebutton").on('click', function(){
$("#file_temp").click();
@ -65,7 +65,7 @@
* 10:대면 20:비대면
* 10:대면 20:비대면
* */
function prcsDivChk(prcsDiv){
/*function prcsDivChk(prcsDiv){
console.log('prcsDiv : ', prcsDiv);
if(prcsDiv==10){
$('#tr_eduPlace #thId').text('교육장소');
@ -73,7 +73,7 @@
$('#tr_eduPlace #thId').text('관련URL');
}
}
}*/
// div codeNm 가져오는 function

View File

@ -46,8 +46,8 @@
}
});
var prcsDiv = "<c:out value='${prcsDiv }' />";
prcsDivChk(prcsDiv);
/*var prcsDiv = "<c:out value='${prcsDiv }' />";
prcsDivChk(prcsDiv);*/
$("#filebutton").on('click', function(){
@ -67,14 +67,14 @@
* 10:대면 20:비대면
* 10:대면 20:비대면
* */
function prcsDivChk(prcsDiv){
/*function prcsDivChk(prcsDiv){
if(prcsDiv==10){
$('#tr_eduPlace #thId').text('교육장소');
}else{
$('#tr_eduPlace #thId').text('관련URL');
}
}
}*/
function fncSave(){

View File

@ -495,12 +495,7 @@
</td>
</tr>
<tr>
<c:if test="${info.prcsDiv eq 10}">
<th scope="row">교육장소</th>
</c:if>
<c:if test="${info.prcsDiv ne 10}">
<th scope="row">관련URL</th>
</c:if>
<th scope="row">교육장소</th>
<td class="addPro_wrap">
<c:out value="${info.eduPlace}"/>
</td>

View File

@ -39,8 +39,8 @@
fnSelectDivAndCn($(this).val());
});
var prcsDiv = "<c:out value='${info.prcsDiv }' />";
prcsDivChk(prcsDiv)
/*var prcsDiv = "<c:out value='${info.prcsDiv }' />";
prcsDivChk(prcsDiv)*/
$("#filebutton").on('click', function(){
$("#file_temp").click();
@ -65,7 +65,7 @@
* 10:대면 20:비대면
* 10:대면 20:비대면
* */
function prcsDivChk(prcsDiv){
/*function prcsDivChk(prcsDiv){
console.log('prcsDiv : ', prcsDiv);
if(prcsDiv==10){
$('#tr_eduPlace #thId').text('교육장소');
@ -73,7 +73,7 @@
$('#tr_eduPlace #thId').text('관련URL');
}
}
}*/
// div codeNm 가져오는 function

View File

@ -46,8 +46,8 @@
}
});
var prcsDiv = "<c:out value='${prcsDiv }' />";
prcsDivChk(prcsDiv);
/*var prcsDiv = "<c:out value='${prcsDiv }' />";
prcsDivChk(prcsDiv);*/
$("#filebutton").on('click', function(){
@ -67,14 +67,14 @@
* 10:대면 20:비대면
* 10:대면 20:비대면
* */
function prcsDivChk(prcsDiv){
/*function prcsDivChk(prcsDiv){
if(prcsDiv==10){
$('#tr_eduPlace #thId').text('교육장소');
}else{
$('#tr_eduPlace #thId').text('관련URL');
}
}
}*/
function fncSave(){

View File

@ -540,7 +540,7 @@
<c:if test="${info.prcsDiv ne 10}">
<th scope="row">관련URL</th>
</c:if> --%>
<th scope="row">관련URL</th>
<th scope="row">교육장소</th>
<td class="addPro_wrap">
<c:out value="${info.eduPlace}"/>
</td>

View File

@ -540,7 +540,7 @@
<c:if test="${info.prcsDiv ne 10}">
<th scope="row">관련URL</th>
</c:if> --%>
<th scope="row">관련URL</th>
<th scope="row">교육장소</th>
<td class="addPro_wrap">
<c:out value="${info.eduPlace}"/>
</td>

View File

@ -545,7 +545,7 @@
<c:if test="${info.prcsDiv ne 10}">
<th scope="row">관련URL</th>
</c:if> --%>
<th scope="row">관련URL</th>
<th scope="row">교육장소</th>
<td class="addPro_wrap">
<c:out value="${info.eduPlace}"/>
</td>