This commit is contained in:
Rinjae
2025-09-05 17:16:26 +09:00
commit c54ef1903f
4947 changed files with 817291 additions and 0 deletions
@@ -0,0 +1,374 @@
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="java.io.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ include file="/jsp/common/include/localemessage.jsp" %>
<%@ page import="com.eactive.eai.rms.common.login.SessionManager"%>
<%@ page import="com.eactive.eai.common.util.SystemUtil"%>
<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Expires", "0");
%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<jsp:include page="/jsp/common/include/css.jsp"/>
<jsp:include page="/jsp/common/include/script.jsp"/>
<script>
var url = '<c:url value="/common/acl/deploy/deployResourceSearchMan.json" />';
var url_view = '<c:url value="/common/acl/deploy/deployResourceSearchMan.view" />';
$(document).ready(function() {
var gridPostData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
$('#sourceGrid').jqGrid({
datatype:"json",
mtype: 'POST',
url: url,
postData : gridPostData,
colNames:[
'<%= localeMessage.getString("deployResourceSearchMan.resourceApp") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.resourceType") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.resourceName") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.resourceDesc") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.resourcePath") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.interfaceName") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.interfaceDesc") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.userId") %>'
, 'downloadable'
],
colModel:[
{ name : 'resourceApp' , align:'center', width: 80}
, { name : 'resourceType' , align:'center', width: 100}
, { name : 'resourceName' , align:'left', width: 250}
, { name : 'resourceDesc' , align:'left', width: 250}
, { name : 'resourcePath' , hidden: true }
, { name : 'interfaceName', align:'center' }
, { name : 'interfaceDesc', hidden: true }
, { name : 'userId' , align:'center', width: 100}
, { name : 'downloadable' , hidden: true},
],
jsonReader: {
repeatitems:false
},
rowNum : 10000,
height: "650",
viewrecords: true,
multiselect: true,
gridComplete:function (d){
var colModel = $(this).getGridParam("colModel");
for(var i = 0 ; i< colModel.length; i++){
$(this).setColProp(colModel[i].name, {sortable : false}); //그리드 헤더 화살표 삭제(정렬X)
}
},
beforeRequest: function() {
$("div.ui-jqgrid-hbox table thead tr th input[type='checkbox']").remove();
},
loadComplete:function (d){
var ids = $(this).jqGrid('getDataIDs');
for (var i = 0; i < ids.length; i++) {
var rowId = ids[i];
var rowData = $(this).jqGrid('getRowData', rowId);
if (rowData.downloadable === 'false') {
$("#" + rowId).find("input[type=checkbox]").attr("disabled", true);
}
}
$("#sourceGrid").tuiTableRowSpan("6");
// rowspan 된 영역 클릭시 해당 record 모두 선택되도록
$('#sourceGrid').on('click', 'tr.jqgrow td:nth-child(7)', function() {
var rowId = $(this).closest('tr').attr('id');
var rowspan = $(this).attr('rowspan') || 1;
rowspan = parseInt(rowspan, 10);
// 현재 클릭된 셀부터 rowspan 개수만큼의 행 선택
var currentRow = $(this).closest('tr');
for (var i = 0; i < rowspan; i++) {
var currentRowId = currentRow.attr('id');
if (!currentRow.find('input[type=checkbox]').is(':disabled') && rowId != currentRowId) {
// 체크박스가 disabled되지 않았다면 해당 행 선택
$("#sourceGrid").jqGrid('setSelection', currentRowId, true);
}
currentRow = currentRow.next();
}
});
},
loadError: function (jqXHR, textStatus, errorThrown) {
var location ='<%=request.getContextPath()%>/';
comloadError(jqXHR, textStatus, errorThrown ,location);
},
beforeSelectRow: function (rowid, e) {
var cb = $('#jqg_sourceGrid_' + rowid);
if (cb.is(':disabled')) {
return false;
}
},
onCellSelect: function (rowid, iCol, cellcontent, e) {
}
});
jQuery("#sourceGrid").jqGrid( 'setGridWidth', $("#sourceGrid_wrapper").width());
$('#targetGrid').jqGrid({
datatype:"json",
colNames:[
'<%= localeMessage.getString("deployResourceSearchMan.resourceApp") %>',
'<%= localeMessage.getString("deployResourceSearchMan.resourceType") %>',
'<%= localeMessage.getString("deployResourceSearchMan.resourceName") %>',
'<%= localeMessage.getString("deployResourceSearchMan.resourcePath") %>',
'<%= localeMessage.getString("deployResourceSearchMan.deleteBtn") %>'
],
colModel:[
{ name : 'resourceApp', hidden: true},
{ name : 'resourceType', align:'center', width: 80},
{ name : 'resourceName', align:'left' , width: 150},
{ name : 'resourcePath', align:'left' , width: 150},
{ name : 'deleteBtn', align:'center', width: 50,
formatter: (cellvalue, options, rowObject) => {
var rowId = options["rowId"];
return "<img id='btn_pop_delete' name='img_"+rowId+"' src=<c:url value='/images/bt/pop_delete.gif' /> />";
},
unformat: (cellvalue, options, rowObject) => {
return "";
}
}
],
jsonReader: {
repeatitems:false
},
rowNum : 10000,
height: 650,
viewrecords: true,
gridComplete:function (d){
var colModel = $(this).getGridParam("colModel");
for(var i = 0 ; i< colModel.length; i++){
$(this).setColProp(colModel[i].name, {sortable : false}); //그리드 헤더 화살표 삭제(정렬X)
}
},
loadComplete : function (data) {
},
loadBeforeSend : function (xhr,settings){
if(this.p.url ==null || this.p.url == ""){
this.p.loadBeforeSend = null;
return false;
}
},
loadError: function (jqXHR, textStatus, errorThrown) {
var location ='<%=request.getContextPath()%>/';
comloadError(jqXHR, textStatus, errorThrown ,location);
},
onSelectRow : function(rowid, status){
},
onCellSelect: function (rowid, iCol, cellcontent, e) {
}
});
jQuery("#targetGrid").jqGrid( 'setGridWidth', $("#targetGrid_wrapper").width());
$("#btn_search").click(function(){
var postData = getSearchForJqgrid("cmd","LIST");
$("#sourceGrid").setGridParam({ postData: postData ,page : "1" }).trigger("reloadGrid");
$('#sourceGrid').on('click', 'tr.jqgrow td:nth-child(7)', function() {
var rowId = $(this).closest('tr').attr('id');
var rowspan = $(this).attr('rowspan') || 1;
rowspan = parseInt(rowspan, 10);
// 현재 클릭된 셀부터 rowspan 개수만큼의 행 선택
var currentRow = $(this).closest('tr');
for (var i = 0; i < rowspan; i++) {
var currentRowId = currentRow.attr('id');
if (!currentRow.find('input[type=checkbox]').is(':disabled') && rowId != currentRowId) {
// 체크박스가 disabled되지 않았다면 해당 행 선택
$("#sourceGrid").jqGrid('setSelection', currentRowId, true);
}
currentRow = currentRow.next();
}
});
});
$("input[name^=search]").keydown(function(key){
if (key.keyCode == 13){
$("#btn_search").click();
}
});
$("#addBtn").click(function(){
var selectedRows = $("#sourceGrid").jqGrid('getGridParam', 'selarrrow'); // SourceGrid에서 선택된 행의 ID 배열
for(var i = 0; i < selectedRows.length; i++) {
var rowData = $("#sourceGrid").jqGrid('getRowData', selectedRows[i]);
var key = rowData.resourceName;
// TargetGrid에서 동일한 키를 가진 행이 있는지 확인
var isDuplicate = false;
var targetGridData = $("#targetGrid").jqGrid('getRowData');
for (var j = 0; j < targetGridData.length; j++) {
if (targetGridData[j].resourceName === key) {
isDuplicate = true;
break;
}
}
// 중복되지 않은 경우에만 TargetGrid에 행 추가
if (!isDuplicate) {
$("#targetGrid").jqGrid('addRowData', rowData.id, rowData);
} else {
//alert('중복된 항목이 존재합니다: ' + key);
}
}
var ids = $('#targetGrid').jqGrid('getDataIDs');
for (var i = 0; i < ids.length; i++) {
var rowid = ids[i];
$("img[name=img_" + rowid + "]").click(function() {
var name = $(this).attr("name");
var rowId = name.split("_")[1];
$('#targetGrid').jqGrid('delRowData', rowId);
});
}
});
$("#btn_download").click(function() {
var targetGridData = $("#targetGrid").jqGrid('getRowData');
const postData = new FormData();
postData.append('cmd', 'DOWNLOAD_RESOURCES_ZIP');
postData.append('gridData', JSON.stringify(targetGridData));
postData.append('serviceType', sessionStorage["serviceType"]);
fetch(url, {
method: 'POST',
// headers: {
// 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
// },
body: postData
})
.then(response => {
const contentDisposition = response.headers.get('Content-Disposition');
let filename = 'noname.txt';
if (contentDisposition) {
const filenameMatch = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(contentDisposition);
if (filenameMatch && filenameMatch[1]) {
filename = filenameMatch[1].replace(/['"]/g, '');
}
}
return response.blob().then(blob => {
return { blob, filename };
});
})
.then(({ blob, filename }) => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
})
.catch(error => console.error('Download error:', error));
});
buttonControl();
$(window).on('resize.jqGrid', function () {
jQuery("#sourceGrid").jqGrid( 'setGridWidth', $("#sourceGrid_wrapper").width());
jQuery("#targetGrid").jqGrid( 'setGridWidth', $("#targetGrid_wrapper").width());
});
});
</script>
</head>
<body>
<div class="right_box">
<div class="content_top">
<ul class="path">
<li><a href="#">${rmsMenuPath}</a></li>
</ul>
</div><!-- end content_top -->
<div class="content_middle" id="content_middle">
<div class="search_wrap">
<button type="button" class="cssbtn" id="btn_search" level="R" ><i class="material-icons">search</i> <%= localeMessage.getString("button.search") %></button>
</div>
<div class="title"><%= localeMessage.getString("deployResourceSearchMan.title") %></div>
<table class="search_condition" cellspacing=0;>
<tbody>
<tr>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.resourceApp") %></th>
<td><input type="text" name="searchResourceApp" value="${param.searchResourceApp}"></td>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.resourceName") %></th>
<td><input type="text" name="searchResourceName" value="${param.searchResourceName}"></td>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.resourceDesc") %></th>
<td><input type="text" name="searchResourceDesc" value="${param.searchResourceDesc}"></td>
</tr>
<tr >
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.resourceType") %></th>
<td>
<div class="select-style">
<select name="searchResourceType" value="${param.searchResourceType}">
<option value="">ALL</option>
<option value="interface">interface</option>
<option value="transform">transform</option>
<option value="layout">layout</option>
</select>
</div>
</td>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.interfaceName") %></th>
<td><input type="text" name="searchInterfaceName" value="${param.searchInterfaceName}"></td>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.interfaceDesc") %></th>
<td><input type="text" name="searchInterfaceDesc" value="${param.searchInterfaceDesc}"></td>
</tr>
</tbody>
</table>
<div style="text-align: right; margin-bottom: 15px;">
<button type="button" class="cssbtn" id="btn_download" level="W" ><i class="material-icons">download</i> Download</button>
</div>
<div style="display: flex; justify-content: space-between;">
<div id="sourceGrid_wrapper" style="width: 65%;">
<table id="sourceGrid" ></table>
</div>
<div style="width: 5%; text-align: center;">
<button type="button" class="cssbtn" id="addBtn" level="W" style="min-width: 50px; margin-bottom: 2px; margin-top: 90px; display: inline-block;">
<i class="material-icons">keyboard_double_arrow_right</i>
</button>
</div>
<div id="targetGrid_wrapper" style="width: 30%;">
<table id="targetGrid" ></table>
</div>
</div>
</div><!-- end content_middle -->
</div><!-- end right_box -->
</body>
</html>
@@ -0,0 +1,146 @@
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="java.io.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ include file="/jsp/common/include/localemessage.jsp" %>
<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Expires", "0");
%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<jsp:include page="/jsp/common/include/css.jsp"/>
<jsp:include page="/jsp/common/include/script.jsp"/>
<script language="javascript" >
var url = '<c:url value="/common/acl/deploy/ruleDeployJobMan.json" />';
var url_view = '<c:url value="/common/acl/deploy/ruleDeployJobMan.view" />';
$(document).ready(function() {
var gridPostData = getSearchForJqgrid("cmd","LIST");
gridPostData["sortName"] ='SCHEDULEDDATETIME';
gridPostData["sortOrder"]='DESC';
$('#grid').jqGrid({
datatype:"json",
mtype: 'POST',
url: url,
postData : gridPostData,
colNames:['<%= localeMessage.getString("ruleDeployJobMan.jobId") %>',
'<%= localeMessage.getString("ruleDeployJobMan.jobName") %>',
'<%= localeMessage.getString("ruleDeployJobMan.serviceType") %>',
'<%= localeMessage.getString("ruleDeployJobMan.schduledDateTime") %>',
'<%= localeMessage.getString("ruleDeployJobMan.lastJobTime") %>',
'<%= localeMessage.getString("ruleDeployJobMan.status") %>',
'<%= localeMessage.getString("ruleDeployJobMan.userId") %>'
],
colModel:[
{ name : 'JOBID', align:'left', sortable:false, hidden:true },
{ name : 'JOBTITLE', align:'left', sortable:false },
{ name : 'SERVICETYPE', align:'center', sortable:false },
{ name : 'SCHEDULEDDATETIME', align:'center', sortable:false, formatter:dateTimeFormater },
{ name : 'LASTJOBTIME', align:'center', sortable:false, formatter:dateTimeFormater },
{ name : 'STATUS', align:'center', sortable:false },
{ name : 'USERID', align:'center', sortable:false }
],
jsonReader: {
repeatitems:false
},
pager : $('#pager'),
page : '${param.page}',
rowNum : '${rmsDefaultRowNum}',
autoheight: true,
height: $("#container").height(),
autowidth: true,
viewrecords: true,
sortname : '${param.sortName}',
sortorder : '${param.sortOrder}',
rowList : eval('[${rmsDefaultRowList}]'),
ondblClickRow: function(rowId) {
var rowData = $(this).getRowData(rowId);
var url2 = url_view;
url2 += '?cmd=DETAIL';
url2 += '&page=' + $(this).getGridParam("page");
url2 += '&returnUrl=' + getReturnUrl();
url2 += '&menuId=' + '${param.menuId}';
url2 += '&sortName=' + $("#grid").getGridParam("sortname");
url2 += '&sortOrder=' + $("#grid").getGridParam("sortorder");
//검색값
url2 += '&' + getSearchUrl();
//key값
url2 += '&jobId=' + rowData['JOBID'];
goNav(url2);
}
});
resizeJqGridWidth('grid','content_middle','1000');
$("#btn_search").click(function(){
var postData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
$("#grid").setGridParam({ postData: postData ,page : "1" }).trigger("reloadGrid");
});
$("input[name^=search]").keydown(function(key){
if (key.keyCode == 13){
$("#btn_search").click();
}
});
buttonControl();
});
function dateTimeFormater(cellvalue, options, rowObject){ //20190513134307
if (cellvalue.trim().length < 14) return "";
var display = "";
display=display+cellvalue.substr(0,4)+"-";
display=display+cellvalue.substr(4,2)+"-";
display=display+cellvalue.substr(6,2)+" ";
display=display+cellvalue.substr(8,2)+":";
display=display+cellvalue.substr(10,2)+":";
display=display+cellvalue.substr(12,2);
return display;
}
</script>
</head>
<body>
<div class="right_box">
<div class="content_top">
<ul class="path">
<li><a href="#">${rmsMenuPath}</a></li>
</ul>
</div><!-- end content_top -->
<div class="content_middle" id="content_middle">
<div class="search_wrap">
<button type="button" class="cssbtn" id="btn_search" level="R" ><i class="material-icons">search</i> <%= localeMessage.getString("button.search") %></button>
</div>
<div class="title"><%= localeMessage.getString("ruleDeployJobMan.title") %></div>
<table class="search_condition" cellspacing=0;>
<tbody>
<tr>
<th style="width:180px;"><%= localeMessage.getString("ruleDeployJobMan.jobName") %></th>
<td><input type="text" name="searchJobTitle" value="${param.searchJobTitle}"></td>
<th style="width:180px;"><%= localeMessage.getString("ruleDeployJobMan.status") %></th>
<td>
<div class="select-style">
<select name="searchStatus" value="${param.searchStatus}">
<option value=""><%= localeMessage.getString("combo.all") %></option>
<option value="standby"><%= localeMessage.getString("ruleDeployJobMan.status.standby") %></option>
<option value="finished"><%= localeMessage.getString("ruleDeployJobMan.status.finished") %></option>
<option value="failed"><%= localeMessage.getString("ruleDeployJobMan.status.failed") %></option>
</select>
</div>
</td>
</tr>
</tbody>
</table>
<table id="grid" ></table>
<div id="pager"></div>
</div><!-- end content_middle -->
</div><!-- end right_box -->
</body>
</html>
@@ -0,0 +1,234 @@
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="java.io.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ include file="/jsp/common/include/localemessage.jsp" %>
<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Expires", "0");
%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<jsp:include page="/jsp/common/include/css.jsp" />
<jsp:include page="/jsp/common/include/script.jsp" />
<script language="javascript">
var url = '<c:url value="/common/acl/deploy/ruleDeployJobMan.json" />';
var url_view = '<c:url value="/common/acl/deploy/ruleDeployJobMan.view" />';
var isDetail = false;
var lastsel2;
function unformatterFunction(cellvalue, options, rowObject) {
return "";
}
function formatterFunction(cellvalue, options, rowObject) {
var rowId = options["rowId"];
return "<img id='btn_pop_delete' name='img_"+rowId+"' src=<c:url value='/images/bt/pop_delete.gif' /> />";
}
function gridRendering() {
$('#grid').jqGrid({
datatype:"local",
loadonce: true,
rowNum: 10000,
colNames:['<%= localeMessage.getString("ruleDeployJobDetail.fileName") %>',
'<%= localeMessage.getString("ruleDeployJobDetail.bizCode") %>',
'<%= localeMessage.getString("ruleDeployJobDetail.ruleType") %>'
],
colModel:[
{ name : 'FILENAME', align:'left', sortable:false },
{ name : 'BIZCODE', align:'center', sortable:false },
{ name : 'RULETYPE', align:'center', sortable:false }
],
jsonReader : {
repeatitems : false
},
loadComplete : function() {
},
onSortCol : function(){
return 'stop'; //정렬 방지
},
height : '500',
autowidth : true,
viewrecords : true
});
resizeJqGridWidth('grid', 'content_middle', '1000');
}
function init( key, callback) {
if (typeof callback === 'function') {
callback( key);
}
}
function detail( key) {
if (!isDetail)
return;
$.ajax({
type : "POST",
url : url,
dataType : "json",
data : {
cmd : 'DETAIL',
jobId : key
},
success : function(json) {
var data = json;
var detail = json.detail;
$("#ajaxForm input[type!=checkbox],#ajaxForm select,#ajaxForm textarea").each(function(){
var name = $(this).attr("name");
var tag = $(this).prop("tagName").toLowerCase();
$(tag+"[name="+name+"]").val(detail[name.toUpperCase()]);
});
$("#grid")[0].addJSONData(data);
formatDateTime();
},
error : function(e) {
alert(e.responseText);
}
});
}
function formatDateTime() {
var cellvalue = $("#scheduledDateTime").val();
if (cellvalue.length == 14) {
var display = "";
display=display+cellvalue.substr(0,4)+"-";
display=display+cellvalue.substr(4,2)+"-";
display=display+cellvalue.substr(6,2)+" ";
display=display+cellvalue.substr(8,2)+":";
display=display+cellvalue.substr(10,2)+":";
display=display+cellvalue.substr(12,2);
$("#scheduledDateTime").val(display);
}
cellvalue = $("#lastJobTime").val();
if (cellvalue.length == 14) {
var display = "";
display=display+cellvalue.substr(0,4)+"-";
display=display+cellvalue.substr(4,2)+"-";
display=display+cellvalue.substr(6,2)+" ";
display=display+cellvalue.substr(8,2)+":";
display=display+cellvalue.substr(10,2)+":";
display=display+cellvalue.substr(12,2);
$("#lastJobTime").val(display);
}
}
$(document).ready(function() {
var returnUrl = getReturnUrlForReturn();
var key = "${param.jobId}";
if (key != "" && key != "null") {
isDetail = true;
}
gridRendering();
init( key, detail);
$("#btn_delete").click(function() {
if(confirm("<%= localeMessage.getString("common.checkDelete") %>")){
var postData = $('#ajaxForm').serializeArray();
postData.push({
name : "cmd",
value : "DELETE"
});
$.ajax({
type : "POST",
url : url,
data : postData,
success : function(args) {
alert("<%= localeMessage.getString("common.deleteMsg") %>");
goNav(returnUrl);//LIST로 이동
},
error : function(e) {
alert(e.responseText);
}
});
}
});
$("#btn_previous").click(function() {
goNav(returnUrl);//LIST로 이동
});
buttonControl(key);
titleControl(key);
});
</script>
</head>
<body>
<div class="right_box">
<div class="content_top">
<ul class="path">
<li><a href="#">${rmsMenuPath}</a></li>
</ul>
</div><!-- end content_top -->
<div class="content_middle" id="content_middle">
<div class="search_wrap">
<button type="button" class="cssbtn" id="btn_delete" level="W" status="DETAIL"><i class="material-icons">delete</i> <%= localeMessage.getString("button.delete") %></button>
<%-- <button type="button" class="cssbtn" id="btn_previous" level="R" status="DETAIL,NEW"><i class="material-icons">arrow_back</i> <%= localeMessage.getString("button.previous") %></button> --%>
<button type="button" class="cssbtn" id="btn_previous" level="R" status="DETAIL,NEW" style="display: none;" ><i class="material-icons">arrow_back</i><%=localeMessage.getString("button.previous")%></button>
</div>
<div class="title"><%= localeMessage.getString("ruleDeployJobDetail.title") %></div>
<form id="ajaxForm">
<table class="table_row" cellspacing="0">
<tr>
<th style="width:20%;"><%= localeMessage.getString("ruleDeployJobMan.jobId") %></th>
<td><input type="text" name="jobId"/></td>
</tr>
<tr>
<th><%= localeMessage.getString("ruleDeployJobMan.jobName") %></th>
<td><input type="text" name="jobTitle"/></td>
</tr>
<tr>
<th><%= localeMessage.getString("ruleDeployJobMan.serviceType") %></th>
<td><input type="text" name="serviceType"/></td>
</tr>
<tr>
<th><%= localeMessage.getString("ruleDeployJobMan.schduledDateTime") %></th>
<td><input type="text" name="scheduledDateTime" id="scheduledDateTime"/></td>
</tr>
<tr>
<th><%= localeMessage.getString("ruleDeployJobMan.lastJobTime") %></th>
<td><input type="text" name="lastJobTime" id="lastJobTime"/></td>
</tr>
<tr>
<th><%= localeMessage.getString("ruleDeployJobMan.userId") %></th>
<td><input type="text" name="userId"/></td>
</tr>
<tr>
<th><%= localeMessage.getString("ruleDeployJobDetail.userIp") %></th>
<td><input type="text" name="userIp"/></td>
</tr>
<tr>
<th><%= localeMessage.getString("ruleDeployJobMan.status") %></th>
<td><input type="text" name="status"/></td>
</tr>
<tr>
<th><%= localeMessage.getString("ruleDeployJobDetail.failedCnt") %></th>
<td><input type="text" name="failedCnt"/></td>
</tr>
<tr>
<th><%= localeMessage.getString("ruleDeployJobDetail.failedMsg") %></th>
<td><textarea name="failedMsg" rows="2"></textarea></td>
</tr>
</table>
</form>
<!-- grid -->
<table id="grid"></table>
</div><!-- end content_middle -->
</div><!-- end right_box -->
</body>
</html>