解决冲突 提交本地

This commit is contained in:
zhangshilin
2018-03-17 17:09:19 +08:00
parent b96389e37f
commit d5a2a32c51
25 changed files with 2737 additions and 8 deletions

View File

@@ -311,6 +311,14 @@
<example>${fns:getSysDictInfoById(id)}</example>
</function>
<function>
<description>根据id获取特定服务配置</description>
<name>getBySpecServiceId</name>
<function-class>com.nis.util.ConfigDictUtils</function-class>
<function-signature>java.lang.String getBySpecServiceId(java.lang.Integer)</function-signature>
<example>${fns:getBySpecServiceId(id)}</example>
</function>
<!-- 计算序号 -->
<function>
<description>计算序号</description>

View File

@@ -300,7 +300,7 @@
<li><a href="${ctx}/basics/serviceDictInfo/form?serviceDictId=${serviceDictInfo.serviceDictId}&itType=${itType}" onclick="return confirmx('您确认要修改该项配置吗?', this.href)"><spring:message code="edit"/></a></li>
</shiro:hasPermission>
<shiro:hasPermission name="sys:dict:edit">
<li><a href="${ctx}/basics/serviceDictInfo/delete?serviceDictId=${serviceDictInfo.serviceDictId}&itType=${itType}" onclick="return confirmx('您确认要删除该项配置吗?', this.href)"><spring:message code="delete"/></a></li>
<li><a href="${ctx}/basics/serviceDictInfo/delete?mulitId=${serviceDictInfo.serviceDictId}&itType=${itType}" onclick="return confirmx('您确认要删除该项配置吗?', this.href)"><spring:message code="delete"/></a></li>
</shiro:hasPermission>
</ul>

View File

@@ -293,7 +293,7 @@
<li><a href="${ctx}/basics/serviceDictInfo/form?serviceDictId=${serviceDictInfo.serviceDictId}&itType=${itType}" onclick="return confirmx('您确认要修改该项配置吗?', this.href)"><spring:message code="edit"/></a></li>
</shiro:hasPermission>
<shiro:hasPermission name="sys:dict:edit">
<li><a href="${ctx}/basics/serviceDictInfo/delete?serviceDictId=${serviceDictInfo.serviceDictId}&itType=${itType}" onclick="return confirmx('您确认要删除该项配置吗?', this.href)"><spring:message code="delete"/></a></li>
<li><a href="${ctx}/basics/serviceDictInfo/delete?mulitId=${serviceDictInfo.serviceDictId}&itType=${itType}" onclick="return confirmx('您确认要删除该项配置吗?', this.href)"><spring:message code="delete"/></a></li>
</shiro:hasPermission>
</ul>

View File

@@ -296,7 +296,7 @@
<li><a href="${ctx}/basics/sysDictInfo/form?sysDictId=${sysDictInfo.sysDictId}&itType=${itType}" onclick="return confirmx('您确认要修改该项配置吗?', this.href)"><spring:message code="edit"/></a></li>
</shiro:hasPermission>
<shiro:hasPermission name="sys:dict:edit">
<li><a href="${ctx}/basics/sysDictInfo/delete?sysDictId=${sysDictInfo.sysDictId}&itType=${itType}" onclick="return confirmx('您确认要删除该项配置吗?', this.href)"><spring:message code="delete"/></a></li>
<li><a href="${ctx}/basics/sysDictInfo/delete?mulitId=${sysDictInfo.sysDictId}&itType=${itType}" onclick="return confirmx('您确认要删除该项配置吗?', this.href)"><spring:message code="delete"/></a></li>
</shiro:hasPermission>
</ul>

View File

@@ -296,7 +296,7 @@
<li><a href="${ctx}/basics/sysDictInfo/form?sysDictId=${sysDictInfo.sysDictId}&itType=${itType}" onclick="return confirmx('您确认要修改该项配置吗?', this.href)"><spring:message code="edit"/></a></li>
</shiro:hasPermission>
<shiro:hasPermission name="sys:dict:edit">
<li><a href="${ctx}/basics/sysDictInfo/delete?sysDictId=${sysDictInfo.sysDictId}&itType=${itType}" onclick="return confirmx('您确认要删除该项配置吗?', this.href)"><spring:message code="delete"/></a></li>
<li><a href="${ctx}/basics/sysDictInfo/delete?mulitId=${sysDictInfo.sysDictId}&itType=${itType}" onclick="return confirmx('您确认要删除该项配置吗?', this.href)"><spring:message code="delete"/></a></li>
</shiro:hasPermission>
</ul>

View File

@@ -0,0 +1,203 @@
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/include/taglib.jsp"%>
<html>
<head>
<link rel="stylesheet" type="text/css" href="${ctxStatic}/pages/css/dictInfo.css" />
<script type="text/javascript" src="${ctxStatic}/pages/scripts/dict.js"></script>
<title></title>
<script type="text/javascript">
$(document).ready(function() {
jQuery.validator.addMethod("maxValue", function(value, element) {
return value >=0&&value<10000000;
}, "请填写正确的协议id");
//校验叶子节点无上级不得选为叶子节点
jQuery.validator.addMethod("leafHasTree",function(value,element){
var flagLeafHasTree=false;
$.ajax({
type:'post',
async:false,
url:'${ctx}/specific/specificServiceCfg/ajaxLeafHasTree',
data:{parentId:$("#specificServiceCfgId").val(),newIsLeaf:$("#isLeaf option:selected").val()},
success:function(data){
flagLeafHasTree=data;
}
});
return flagLeafHasTree;
},"该配置上级为根节点,不得设为叶子节点");
//校验叶子节点有下级不得更改为叶子节点
jQuery.validator.addMethod("leafChange",function(value,element){
var flagLeafChange=false;
$.ajax({
type:'post',
async:false,
url:'${ctx}/specific/specificServiceCfg/ajaxLeafChange',
data:{parent:"${specificServiceCfg.specServiceId}",newIsLeaf:$("#isLeaf option:selected").val()},
success:function(data){
flagLeafChange=data;
}
});
return flagLeafChange;
},"该配置包含下级配置,不得改为叶子节点");
$("#name").focus();
$("#inputForm").validate({
rules:{
'specServiceId':{
required:true,
digits:true,
maxValue: true,
remote:'${ctx}/specific/specificServiceCfg/isIdRepeat?oldId=${specificServiceCfg.specServiceId}'
},
'specServiceName':{
required:true
},
'specServiceDesc':{
required:true
},
'isLeaf':{
leafHasTree:true,
leafChange:true
}
},
messages: {
'specServiceId':{
required:'请填写协议ID',
digits:"请填写整数数字",
maxValue: "请填写正确的协议ID",
remote:'该协议ID已存在'
},
'specServiceName':{
required:'请填写协议名称'
},
'specServiceDesc':{
required:'请填写协议描述'
},
'isLeaf':{
leafHasTree:'该配置上级为根节点,不得设为叶子节点',
leafChange:'该配置包含下级配置,不得改为叶子节点'
}
},
submitHandler: function(form){
if(!validateItem()) {
return false;
}
loading('正在提交,请稍等...');
form.submit();
},
errorContainer: "#messageBox",
errorPlacement: function(error, element) {
$("#messageBox").text("输入有误,请先更正。");
if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
error.appendTo(element.parent().parent());
} else {
error.insertAfter(element);
}
}
});
});
</script>
</head>
<body>
<div class="page-content">
<div class="theme-panel hidden-xs hidden-sm">
<button type="button" class="btn btn-default" onclick="history.go(-1)"><spring:message code="back"/></button>
</div>
<h3 class="page-title">
<spring:message code="configuration_manage"/>
</h3>
<div class="row">
<div class="col-md-12">
<div class="portlet box blue">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-gift"></i><shiro:hasPermission name="sys:menu:edit">${not empty specificServiceCfg.specServiceId?'修改':'添加'}</shiro:hasPermission><shiro:lacksPermission name="sys:menu:edit"><spring:message code="show"/></shiro:lacksPermission></div>
<div class="tools">
<!-- <a href="javascript:;" class="collapse"> </a>
<a href="#portlet-config" data-toggle="modal" class="config"> </a>
<a href="javascript:;" class="reload"> </a>
<a href="javascript:;" class="remove"> </a> -->
</div>
</div>
<div class="portlet-body form">
<div class="form-body">
<!-- BEGIN FORM-->
<form:form id="inputForm" modelAttribute="specificServiceCfg" action="${ctx}/specific/specificServiceCfg/saveOrUpdate" method="post" class="form-horizontal">
<input name="oldId" type="hidden" value="${specificServiceCfg.specServiceId}"/>
<form:hidden path="isValid" class="form-control"/>
<sys:message content="${message}"/>
<div class="form-group">
<label class="col-md-3 control-label"><spring:message code="superior_config"/>:</label>
<div class="col-md-4">
<sys:treeselect id="specificServiceCfg" name="parent.specServiceId" value="${specificServiceCfg.parent.specServiceId}" labelName="parent.specServiceName" labelValue="${specificServiceCfg.parent.specServiceName eq '根节点'?'根节点':fns:getBySpecServiceId(specificServiceCfg.parent.specServiceId).specServiceName}"
title="菜单" url="/specific/specificServiceCfg/treeData" extId="${specificServiceCfg.specServiceId}" cssClass="required form-control"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>协议ID:</label>
<div class="col-md-4">
<input id="specServiceId" name="specServiceId" maxlength="50" class="form-control" value="${specificServiceCfg.specServiceId}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>协议名称:</label>
<div class="col-md-4">
<form:input path="specServiceName" htmlEscape="false" maxlength="50" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>maat端配置分组id:</label>
<div class="col-md-4">
<form:input path="groupId" htmlEscape="false" maxlength="50" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font><spring:message code="is_leaf"/>:</label>
<div class="col-md-4">
<form:select path="isLeaf" class="form-control">
<form:options items="${fns:getDictList('SYS_YES_NO')}" itemLabel="itemValue" itemValue="itemCode" htmlEscape="false"/>
</form:select>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">协议描述:</label>
<div class="col-md-4">
<form:textarea path="specServiceDesc" htmlEscape="false" maxlength="2000" class="form-control"/>
</div>
</div>
<div class="form-actions">
<div class="row">
<div class="col-md-offset-3 col-md-9">
<shiro:hasPermission name="sys:menu:edit"><button type="submit" class="btn btn-circle blue"><spring:message code="submit"/></button></shiro:hasPermission>
<button type="button" class="btn btn-circle grey-salsa btn-outline" onclick="history.go(-1)"><spring:message code="cancel"/></button>
</div>
</div>
</div>
</form:form>
<!-- END FORM-->
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,97 @@
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/include/taglib.jsp"%>
<html>
<head>
<link rel="stylesheet" type="text/css" href="${ctxStatic}/pages/css/dictInfo.css" />
<script type="text/javascript" src="${ctxStatic}/pages/scripts/dict.js"></script>
</head>
<body>
<div class="page-content">
<div class="theme-panel hidden-xs hidden-sm">
<button type="button" class="btn btn-default" onclick="history.go(-1)"><spring:message code="back"/></button>
</div>
<h3 class="page-title">
<spring:message code="configuration_manage"/>
</h3>
<div class="row">
<div class="col-md-12">
<div class="portlet box blue">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-gift"></i><spring:message code="show"/></div>
<div class="tools">
</div>
</div>
<div class="portlet-body form">
<div class="form-body">
<!-- BEGIN FORM-->
<form:form id="inputForm" modelAttribute="specificServiceCfg" class="form-horizontal">
<div class="form-group">
<label class="col-md-3 control-label"><spring:message code="superior_config"/>:</label>
<div class="col-md-4">
<input value="${specificServiceCfg.parent.specServiceId == 0?'根节点':fns:getBySpecServiceId(specificServiceCfg.parent.specServiceId).specServiceName}" maxlength="50" class="form-control" readonly="readonly"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>协议ID:</label>
<div class="col-md-4">
<input id="specServiceId" name="specServiceId" maxlength="50" class="form-control" value="${specificServiceCfg.specServiceId}" readonly="readonly"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>协议名称:</label>
<div class="col-md-4">
<form:input path="specServiceName" htmlEscape="false" maxlength="50" class="form-control" readonly="readonly"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>maat端配置分组id:</label>
<div class="col-md-4">
<form:input path="groupId" htmlEscape="false" maxlength="50" class="form-control" readonly="readonly"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font><spring:message code="is_leaf"/>:</label>
<div class="col-md-4">
<input value="${fns:getDictLabel('SYS_YES_NO',specificServiceCfg.isLeaf,'0')}" maxlength="50" class="form-control" readonly="readonly"/>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font><spring:message code="is_leaf"/>:</label>
<div class="col-md-4">
<input value="<fmt:formatDate value='${specificServiceCfg.opTime}' pattern='yyyy-MM-dd HH:mm:ss'/>" maxlength="50" class="form-control" readonly="readonly" />
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label">协议描述:</label>
<div class="col-md-4">
<form:textarea path="specServiceDesc" htmlEscape="false" maxlength="2000" class="form-control" readonly="readonly"/>
</div>
</div>
</form:form>
<!-- END FORM-->
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,262 @@
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/include/taglib.jsp"%>
<html>
<head>
<title></title>
<link href="${ctxStatic}/global/plugins/treeTable/themes/vsStyle/treeTable.min.css" rel="stylesheet" type="text/css" />
<script src="${ctxStatic}/global/plugins/treeTable/jquery.treeTable.min.js" type="text/javascript"></script>
<script src="${ctxStatic}/pages/scripts/dict.js" type="text/javascript"></script>
<script type="text/javascript">
function reset(){
$("#searchForm").reset();
}
/**
处理全选、全取消
**/
function selectAll(){
//alert($("#selAll").prop("checked"));
if($("#selAll").prop("checked")){
//$("#treeTable").find(":checkbox[name='check']").attr("checked","checked");
//$("#treeTable").find(":checkbox[name='check']").each(function(){
$("input[name='check']:checkbox").each(function(){
$(this).prop("checked",true);
});
}else{
//$("#treeTable").find(":checkbox[name='check']").attr("checked",false);
//$("#treeTable").find(":checkbox[name='check']").each(function(){
$("input[name='check']:checkbox").each(function(){
//$(this).attr("checked",false);
$(this).removeProp("checked");
});
}
}
/*
系统通用方法根据参数来决定处理的url和参数
*/
function cmd(){
var url=arguments[0];
var mulitId="";
jQuery("#treeTable").find(":checkbox:checked[name='check']").each(function(){
if(jQuery(this).val()!=""){
mulitId+=jQuery(this).val()+",";
}
});
if(mulitId!=""){
confirmx('您确认要执行该操作?', url+"?mulitId="+mulitId);
}else{
alert("至少选择一条数据记录");
}
}
//查询
function page(n,s){
//$("#intype").attr("name",$("#seltype").val());
$("#pageNo").val(n);
$("#pageSize").val(s);
$("#searchForm").attr("action","${ctx}/specific/specificServiceCfg/list");
$("#searchForm").submit();
return false;
}
$(document).ready(function() {
//reset
$("#resetBtn").on("click",function(){
$(".Wdate").attr("value",'');
$("#searchForm")[0].reset();
});
//设定显示总条数
$("#showTotalCount").text('${showTotalCount}');
//条件回传
$("#seltype").find("option[value=${searchType==null?11:searchType}]").attr("selected",true);
$("#intype").attr("name",$("#seltype").find("option:selected").val());
$("#intype").val('${searchContent}');
//筛选功能初始化
filterActionInit();
$("#isAudit").change(function(){
page();
});
$("#seltype").change(function(){
$("#intype").val("");
$("#intype").attr("placeholder","请输入"+$(this).find("option:selected").text());
$("#intype").attr("name",$(this).find("option:selected").val());
});
$("#treeTable").treeTable({expandLevel : 3}).show();
});
</script>
<style type="text/css">
.dropdown-menu {
min-width: 70px;
}
</style>
</head>
<body>
<div class="page-content">
<div class="theme-panel hidden-xs hidden-sm">
<button type="button" class="btn btn-primary"
onClick="javascript:window.location='${ctx}/specific/specificServiceCfg/form'">
<i class="fa fa-plus"></i>
<spring:message code="add"></spring:message>配置</button>
</div>
<h3 class="page-title">
特定服务信息
<small><spring:message code="date_list"/></small>
</h3>
<h5 class="page-header"></h5>
<div class="row">
<div class="col-md-12">
<div class="portlet">
<div class="portlet-body">
<div class="row" >
<form:form id="searchForm" modelAttribute="specificServiceCfg" action="${ctx}/specific/specificServiceCfg/list" method="post" class="form-search">
<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
<!-- 筛选按钮展开状态-->
<input id="isFilterAction" name="isFilterAction" type="hidden" value="${specificServiceCfg.isFilterAction}"/>
<!-- 搜索内容与操作按钮栏 -->
<div class="col-md-12">
<div class="pull-left">
<div class="input-group">
<div class="input-group-btn">
<select id="seltype" class="selectpicker select2 input-small" >
<option value="specServiceId">协议ID</option>
<option value="specServiceName">协议名称</option>
</select>
</div>
<input id="intype" class="form-control input-medium" placeholder="请输入协议ID" type="text">
<div class="input-group-btn">
<button class="btn btn-default btn-search" type="button" onclick="page()"><i class="fa fa-search"></i></button>
</div>
</div>
</div>
<div class="pull-left">
<button type="button" class="btn btn-default" id="filter-btn"> 筛选 <i class="fa fa-angle-double-down"></i></button>
</div>
<div class="pull-right">
<button type="button" class="btn btn-default" onclick="cmd('${ctx}/specific/specificServiceCfg/form')">
<i class="fa fa-edit"></i> 编辑</button>
<button type="button" class="btn btn-default" onclick="cmd('${ctx}/specific/specificServiceCfg/delete')">
<i class="fa fa-trash"></i> 删除</button>
<a class="btn btn-icon-only btn-default setfields tooltips"
data-container="body" data-placement="top" data-original-title="自定义列字段" href="javascript:;">
<i class="icon-wrench"></i>
</a>
</div>
</div>
<!-- /搜索内容与操作按钮栏-->
<!-- 筛选搜索内容栏默认隐藏-->
<div class="col-md-12 filter-action-select-panle hide" >
<div class="row">
<div class="col-md-6">
<div class="pull-left">
<label>操作时间:</label>
</div>
<div class="pull-left">
<input id="beginDate" name="beginDate" type="text" readonly="readonly" maxlength="20" class="form-control input-small Wdate"
value="<fmt:formatDate value="${specificServiceCfg.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
</div>
<div class="pull-left">
<label>到</label>
</div>
<div class="pull-left">
<input id="endDate" name="endDate" type="text" readonly="readonly" maxlength="20" class="form-control input-small Wdate"
value="<fmt:formatDate value="${specificServiceCfg.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
</div>
</div>
</div>
<h5 class="page-header"></h5>
<div class="row">
<div class="pull-left">
<button type="button" class="btn blue" onclick="page()"> <i class="fa fa-search"></i> 搜索 </button>
<button type="button" id="resetBtn" class="btn btn-default" onclick="reset()"> <i class="fa fa-refresh"></i> 重置 </button>
</div>
</div>
</div>
<!-- /筛选搜索内容栏 结束-->
</form:form>
</div>
<!-- <div class="table-responsive"> -->
<sys:message content="${message}"/>
<table id="treeTable" class="table table-striped table-bordered table-condensed">
<thead>
<tr>
<th><input type="checkbox" class="ckboxs" id="selAll" onclick="selectAll()"></th>
<th>序号</th>
<th>协议ID</th>
<th>协议名称</th>
<th>协议描述</th>
<th>maat端配置分组id</th>
<th><spring:message code="is_leaf"/></th>
<th>操作时间</th>
<shiro:hasPermission name="sys:menu:edit"><th><spring:message code="operation"/></th></shiro:hasPermission>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="specificServiceCfg" varStatus="ss">
<tr id="${specificServiceCfg.specServiceId}" pId="${specificServiceCfg.parent.specServiceId ne 0?specificServiceCfg.parent.specServiceId:0}">
<td><input type="checkbox" class="ckbox" name="check" value="${specificServiceCfg.specServiceId}"></td>
<td>${specificServiceCfg.showSequence}</td>
<td nowrap><i class="icon-icon-tablet"></i><a href="${ctx}/specific/specificServiceCfg/form?specServiceId=${specificServiceCfg.specServiceId}&doAction=0">${specificServiceCfg.specServiceId}</a></td>
<td title="${specificServiceCfg.specServiceName}">${specificServiceCfg.specServiceName}</td>
<td title="${specificServiceCfg.specServiceDesc}">${fns:abbr(specificServiceCfg.specServiceDesc,15)}</td>
<td>${specificServiceCfg.groupId }</td>
<td>${fns:getDictLabel("SYS_YES_NO",specificServiceCfg.isLeaf,"0")}</td>
<td><fmt:formatDate value="${specificServiceCfg.opTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td>
<div class="btn-group btn-xs">
<a class="btn btn-primary btn-xs dropdown-toggle" data-toggle="dropdown" href="#"><spring:message code="operation"/><span class="caret"></span></a>
<ul class="dropdown-menu btn-xs">
<li><a href="${ctx}/specific/specificServiceCfg/form?mulitId=${specificServiceCfg.specServiceId}&doAction=0"><spring:message code="show"/></a></li>
<shiro:hasPermission name="sys:dict:edit">
<li><a href="${ctx}/specific/specificServiceCfg/form?mulitId=${specificServiceCfg.specServiceId}" onclick="return confirmx('您确认要修改该项配置吗?', this.href)"><spring:message code="edit"/></a></li>
</shiro:hasPermission>
<shiro:hasPermission name="sys:dict:edit">
<li><a href="${ctx}/specific/specificServiceCfg/delete?mulitId=${specificServiceCfg.specServiceId}" onclick="return confirmx('您确认要删除该项配置吗?', this.href)"><spring:message code="delete"/></a></li>
</shiro:hasPermission>
</ul>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="page">${page}</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,383 @@
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/include/taglib.jsp"%>
<html>
<head>
<link rel="stylesheet" type="text/css"
href="${ctxStatic}/pages/css/dictInfo.css" />
<script type="text/javascript" src="${ctxStatic}/pages/scripts/dict.js"></script>
<title></title>
<script type="text/javascript">
$(document).ready(
function() {
jQuery.validator.addMethod("maxValue",
function(value, element) {
return value >= 0 && value < 10000000;
}, "请填写正确的协议id");
//ip地址校验
jQuery.validator.addMethod("ip",function(value, element) {
return this.optional(element)||(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(value) && (RegExp.$1 <256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256));
}, "请填写正确的IP地址,如192.168.0.1");
$("#name").focus();
$("#inputForm")
.validate(
{
rules : {
'specServiceId':{
required:true
},
'srcIp':{
required:true,
ip:true
},
'dstIp':{
required:true,
ip:true
},
'srcIpMask':{
required:true
},
'dstIpMask':{
required:true
},
'srcPort':{
required:true,
digits:true,
max: 65535,
min: 0
},
'dstPort':{
required:true,
digits:true,
max: 65535,
min: 0
},
'srcPortMask':{
required:true,
digits:true,
max: 65535,
min: 0
},
'dstPortMask':{
required:true,
digits:true,
max: 65535,
min: 0
}
},
messages : {
'specServiceId':{
required:'<spring:message code="required"/>'
},
'srcIp':{
required:'<spring:message code="required"/>',
ip:'请填写正确的ip'
},
'dstIp':{
required:'<spring:message code="required"/>',
ip:'请填写正确的ip'
},
'srcIpMask':{
required:'<spring:message code="required"/>'
},
'dstIpMask':{
required:'<spring:message code="required"/>'
},
'srcPort':{
required:'<spring:message code="required"/>',
digits:'请填写整数',
max: '数值不得大于65535',
min: '数值不得小于0'
},
'dstPort':{
required:'<spring:message code="required"/>',
digits:'请填写整数',
max: '数值不得大于65535',
min: '数值不得小于0'
},
'srcPortMask':{
required:'<spring:message code="required"/>',
digits:'请填写整数',
max: '数值不得大于65535',
min: '数值不得小于0'
},
'dstPortMask':{
required:'<spring:message code="required"/>',
digits:'请填写整数',
max: '数值不得大于65535',
min: '数值不得小于0'
}
},
submitHandler : function(form) {
if (!validateItem()) {
return false;
}
loading('正在提交,请稍等...');
form.submit();
},
errorContainer : "#messageBox",
errorPlacement : function(error, element) {
$("#messageBox").text("输入有误,请先更正。");
if (element.is(":checkbox")
|| element.is(":radio")
|| element.parent().is(
".input-append")) {
error.appendTo(element.parent()
.parent());
} else {
error.insertAfter(element);
}
}
});
});
</script>
</head>
<body>
<div class="page-content">
<div class="theme-panel hidden-xs hidden-sm">
<button type="button" class="btn btn-default"
onclick="history.go(-1)">
<spring:message code="back" />
</button>
</div>
<h3 class="page-title">
<spring:message code="configuration_manage" />
</h3>
<div class="row">
<div class="col-md-12">
<div class="portlet box blue">
<div class="portlet-title">
<div class="caption">
<i class="fa fa-gift"></i>
<shiro:hasPermission name="sys:menu:edit">${not empty specificServiceHostCfg.hostId?'修改':'添加'}</shiro:hasPermission>
<shiro:lacksPermission name="sys:menu:edit">
<spring:message code="show" />
</shiro:lacksPermission>
</div>
<div class="tools"></div>
</div>
<div class="portlet-body form">
<div class="form-body">
<!-- BEGIN FORM-->
<form:form id="inputForm" modelAttribute="specificServiceHostCfg" action="${ctx}/specific/specificServiceHostCfg/saveOrUpdate" method="post" class="form-horizontal" >
<form:hidden path="hostId" class="form-control" />
<sys:message content="${message}" />
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>协议ID:</label>
<div class="col-md-6">
<form:input path="specServiceId" htmlEscape="false" maxlength="50" class="form-control" />
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>方向:</label>
<div class="col-md-6">
<form:select path="direction" class="selectpicker select2 form-control" >
<c:forEach items="${fns:getDictList('SPEC_DIRECTION')}" var="dict">
<form:option value="${dict.itemCode}">${dict.itemValue}</form:option>
</c:forEach>
</form:select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>协议:</label>
<div class="col-md-6">
<form:select path="protocol" class="selectpicker select2 form-control" >
<form:option value="">-请选择协议类型-</form:option>
<c:forEach items="${fns:getDictList('SPEC_PROTOCOL')}" var="dict">
<form:option value="${dict.itemCode}">${dict.itemValue}</form:option>
</c:forEach>
</form:select>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>是否审核:</label>
<div class="col-md-6">
<form:select path="isAudit" class="selectpicker select2 form-control" >
<c:if test="${hostId == null}">
<form:option value="0">${fns:getDictLabel("SPEC_AUDIT","0","0")}</form:option>
</c:if>
</form:select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>源IP地址:</label>
<div class="col-md-6">
<form:input path="srcIp" htmlEscape="false" maxlength="50" class="form-control" placeholder="0.0.0.0"/>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>目的IP地址:</label>
<div class="col-md-6">
<form:input path="dstIp" htmlEscape="false" maxlength="50" class="form-control" placeholder="0.0.0.0"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>源地址掩码:</label>
<div class="col-md-6">
<form:input path="srcIpMask" htmlEscape="false" maxlength="50" class="form-control" placeholder="255.255.255.255"/>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>目的地址掩码:</label>
<div class="col-md-6">
<form:input path="dstIpMask" htmlEscape="false" maxlength="50" class="form-control" placeholder="255.255.255.255"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>源端口:</label>
<div class="col-md-6">
<form:input path="srcPort" htmlEscape="false" maxlength="50" class="form-control" placeholder="0"/>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>目的端口:</label>
<div class="col-md-6">
<form:input path="dstPort" htmlEscape="false" maxlength="50" class="form-control" placeholder="0"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>源端口掩码:</label>
<div class="col-md-6">
<form:input path="srcPortMask" htmlEscape="false" maxlength="50" class="form-control" placeholder="65535"/>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>目的端口掩码:</label>
<div class="col-md-6">
<form:input path="dstPortMask" htmlEscape="false" maxlength="50" class="form-control" placeholder="65535"/>
</div>
</div>
</div>
</div>
<%-- <div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>创建人员:</label>
<div class="col-md-6">
<form:input path="creator.id" htmlEscape="false" maxlength="50" class="form-control" />
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>配置时间:</label>
<div class="col-md-6">
<form:input path="createTime" htmlEscape="false" maxlength="50" class="form-control" />
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>修改人员:</label>
<div class="col-md-6">
<form:input path="editor.id" htmlEscape="false" maxlength="50" class="form-control" />
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>修改时间:</label>
<div class="col-md-6">
<form:input path="editTime" htmlEscape="false" maxlength="50" class="form-control" />
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>审核人员:</label>
<div class="col-md-6">
<form:input path="auditor.id" htmlEscape="false" maxlength="50" class="form-control" />
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="col-md-3 control-label"><font color="red">*</font>审核时间:</label>
<div class="col-md-6">
<form:input path="auditTime" htmlEscape="false" maxlength="50" class="form-control" />
</div>
</div>
</div>
</div> --%>
<div class="form-actions">
<div class="row">
<div class="col-md-offset-3 col-md-9">
<shiro:hasPermission name="sys:menu:edit"><button type="submit" class="btn btn-circle blue"><spring:message code="submit" /></button></shiro:hasPermission>
<button type="button" class="btn btn-circle grey-salsa btn-outline" onclick="history.go(-1)"> <spring:message code="cancel" /></button>
</div>
</div>
</div>
</form:form>
<!-- END FORM-->
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,356 @@
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/include/taglib.jsp"%>
<html>
<head>
<title>特定服务服务器IP管理</title>
<link href="${pageContext.request.contextPath}/static/global/plugins/bootstrap-select/css/bootstrap-select.min.css" rel="stylesheet"/>
<script src="${pageContext.request.contextPath}/static/global/plugins/bootstrap-select/js/bootstrap-select.min.js"></script>
<c:choose>
<c:when test="${cookie.Language.value eq 'zh_CN'}">
<script src="${pageContext.request.contextPath}/static/global/plugins/bootstrap-select/js/i18n/defaults-zh_CN.min.js"></script>
</c:when>
<c:when test="${cookie.Language.value eq 'en'}">
<script src="${pageContext.request.contextPath}/static/global/plugins/bootstrap-select/js/i18n/defaults-en_US.min.js"></script>
</c:when>
<c:when test="${cookie.Language.value eq 'ru_RU'}">
<script src="${pageContext.request.contextPath}/static/global/plugins/bootstrap-select/js/i18n/defaults-ru_RU.min.js"></script>
</c:when>
<c:otherwise>
<script src="${pageContext.request.contextPath}/static/global/plugins/bootstrap-select/js/i18n/defaults-en_US.min.js"></script>
</c:otherwise>
</c:choose>
<script>
$(document).ready(function() {
//筛选功能初始化
filterActionInit();
$("#isAudit").change(function(){
page();
});
$("#direction").change(function(){
page();
});
$("#protocol").change(function(){
page();
});
//全选及取消
$("#checkAll").change(function(){
if($("#checkAll").prop("checked")){
$("input.i-checks").prop("checked",true);
}else{
$("input.i-checks").prop("checked",false);
}
});
});
function resetx(){
$(':input','#searchForm')
.not(':button,:submit,:reset,:hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
$("select.selectpicker").each(function(){
$(this).selectpicker('val',$(this).find('option:first').val());
$(this).find("option").attr("selected",false);
$(this).find("option:first").attr("selected",true);
});
$("#specServiceId").attr("value","");
$("#srcIp").attr("value","");
$("#dstIp").attr("value","");
}
//编辑
function edit(){
var cked = $('tbody tr td input.i-checks:checkbox:checked');
if(cked.val()==1){
top.$.jBox.tip("<spring:message code='has_approved'/>", "<spring:message code='info'/>");
return;
}
if(cked.length==1){
window.location = "${ctx}/specific/specificServiceHostCfg/form?hostId="+cked.attr("id");
}else{
top.$.jBox.tip("<spring:message code='check_one'/>", "<spring:message code='info'/>");
return;
}
}
//删除
function delAll(){
var mulitId="";
jQuery("#contentTable").find(":checkbox:checked[name='check']").each(function(){
if(jQuery(this).val()!=""){
mulitId+=jQuery(this).val()+",";
}
});
if(mulitId!=""){
confirmx('您确认要执行该操作?', '${ctx}/specific/specificServiceHostCfg/delete?mulitId='+mulitId);
}else{
alert("至少选择一条数据记录");
}
}
//查询
function page(n,s){
$("#pageNo").val(n);
$("#pageSize").val(s);
$("#searchForm").attr("action","${ctx}/specific/specificServiceHostCfg/list");
$("#searchForm").submit();
return false;
}
</script>
</head>
<body>
<div class="page-content">
<div class="theme-panel hidden-xs hidden-sm">
<button type="button" class="btn btn-primary"
onClick="javascript:window.location='${ctx}/specific/specificServiceHostCfg/form'">
<i class="fa fa-plus"></i>
<spring:message code="add"/></button>
</div>
<h3 class="page-title">
特定服务服务器IP管理
<small><spring:message code="date_list"/></small>
</h3>
<h5 class="page-header"></h5>
<div class="row">
<div class="col-md-12">
<div class="portlet">
<div class="portlet-body">
<div class="row" >
<form:form id="searchForm" modelAttribute="specificServiceHostCfg" action="${ctx}/specific/specificServiceHostCfg/list" method="post" class="form-search">
<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
<!-- 筛选按钮展开状态-->
<input id="isFilterAction" name="isFilterAction" type="hidden" value="${specificServiceHostCfg.isFilterAction }"/>
<!-- 搜索内容与操作按钮栏 -->
<div class="col-md-12">
<div class="pull-left">
<form:select path="isAudit" class="selectpicker select2 input-small" >
<form:option value=""><spring:message code="all_states"/></form:option>
<c:forEach items="${fns:getDictList('SPEC_AUDIT')}" var="dict">
<form:option value="${dict.itemCode}">${dict.itemValue}</form:option>
</c:forEach>
</form:select>
</div>
<div class="pull-left">
<c:set var="spec_service_id">协议ID</c:set>
<form:select path="specServiceId" class="selectpicker select2 input-small" title="${spec_service_id}" data-live-search="true" data-live-search-placeholder="search">
<c:forEach items="${listSpecServiceId}" var="specServiceId" >
<form:option value="${specServiceId}">${specServiceId}</form:option>
</c:forEach>
</form:select>
</div>
<div class="pull-left">
<c:set var="src_ip">源Ip地址</c:set>
<form:select path="srcIp" class="selectpicker select2 input-small" title="${src_ip}" data-live-search="true" data-live-search-placeholder="search">
<c:forEach items="${listSrcIp}" var="srcIp" >
<form:option value="${srcIp}">${srcIp}</form:option>
</c:forEach>
</form:select>
</div>
<div class="pull-left">
<c:set var="dst_ip">目的Ip地址</c:set>
<form:select path="dstIp" class="selectpicker select2 input-small" title="${dst_ip}" data-live-search="true" data-live-search-placeholder="search">
<c:forEach items="${listSrcIp}" var="dstIp" >
<form:option value="${dstIp}">${dstIp}</form:option>
</c:forEach>
</form:select>
</div>
<div class="pull-left">
<form:select path="direction" class="selectpicker select2 input-small" >
<form:option value="">-请选择方向-</form:option>
<c:forEach items="${fns:getDictList('SPEC_DIRECTION')}" var="dict">
<form:option value="${dict.itemCode}">${dict.itemValue}</form:option>
</c:forEach>
</form:select>
</div>
<div class="pull-left" style="margin-right:0px;">
<form:select path="protocol" class="selectpicker select2 input-small" >
<form:option value="">-请选择协议-</form:option>
<c:forEach items="${fns:getDictList('SPEC_PROTOCOL')}" var="dict">
<form:option value="${dict.itemCode}">${dict.itemValue}</form:option>
</c:forEach>
</form:select>
</div>
<div class="pull-left">
<button class="btn btn-default btn-search" type="button" onclick="return page()"><i class="fa fa-search"></i></button>
</div>
<div class="pull-left">
<button type="button" class="btn btn-default" id="filter-btn"> 筛选 <i class="fa fa-angle-double-down"></i></button>
</div>
<div class="pull-right">
<button type="button" class="btn btn-default" onclick="edit()">
<i class="fa fa-edit"></i> <spring:message code="edit"></spring:message></button>
<button type="button" class="btn btn-default" onclick="delAll()">
<i class="fa fa-trash"></i> 删除</button>
<div class="btn-group" >
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-wrench"></i> <spring:message code="examine"></spring:message>
<i class="fa fa-angle-down"></i>
</button>
<ul class="dropdown-menu pull-right">
<li><sys:delRow url="${ctx}/cfg/request/requestExamine" id="contentTable" label="approved"></sys:delRow></li>
<li><sys:delRow url="${ctx}/cfg/request/requestExamineNo" id="contentTable" label="unapproved"></sys:delRow></li>
<li><sys:delRow url="${ctx}/cfg/request/requestCancelExamine" id="contentTable" label="cancelPass"></sys:delRow></li>
</ul>
</div>
<a class="btn btn-icon-only btn-default setfields tooltips"
data-container="body" data-placement="top" data-original-title="自定义列字段" href="javascript:;">
<i class="icon-wrench"></i>
</a>
</div>
</div>
<!-- /搜索内容与操作按钮栏-->
<!-- 筛选搜索内容栏默认隐藏-->
<div class="col-md-12 filter-action-select-panle hide" >
<div class="row">
<div class="col-md-6">
<div class="pull-left">
<label>配置时间:</label>
</div>
<div class="pull-left">
<input id="beginDate" name="beginDate" type="text" readonly="readonly" maxlength="20" class="form-control input-small Wdate" data-options="buttons:buttons"
value="<fmt:formatDate value="${specificServiceHostCfg.beginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
</div>
<div class="pull-left">
<label><spring:message code="to"/></label>
</div>
<div class="pull-left">
<input id="endDate" name="endDate" type="text" readonly="readonly" maxlength="20" class="form-control input-small Wdate"
value="<fmt:formatDate value="${specificServiceHostCfg.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
</div>
</div>
<div class="col-md-6">
<div class="pull-left">
<label>修改时间:</label>
</div>
<div class="pull-left">
<input id="editBeginDate" name="editBeginDate" type="text" readonly="readonly" maxlength="20" class="form-control input-small Wdate"
value="<fmt:formatDate value="${specificServiceHostCfg.editBeginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
</div>
<div class="pull-left">
<label><spring:message code="to"/></label>
</div>
<div class="pull-left">
<input id="editEndDate" name="editEndDate" type="text" readonly="readonly" maxlength="20" class="form-control input-small Wdate"
value="<fmt:formatDate value="${specificServiceHostCfg.editEndDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
</div>
</div>
<div class="col-md-6">
<div class="pull-left">
<label>审核时间:</label>
</div>
<div class="pull-left">
<input id="auditBeginDate" name="auditBeginDate" type="text" readonly="readonly" maxlength="20" class="form-control input-small Wdate"
value="<fmt:formatDate value="${specificServiceHostCfg.auditBeginDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
</div>
<div class="pull-left">
<label><spring:message code="to"/></label>
</div>
<div class="pull-left">
<input id="auditEndDate" name="auditEndDate" type="text" readonly="readonly" maxlength="20" class="form-control input-small Wdate"
value="<fmt:formatDate value="${specificServiceHostCfg.auditEndDate}" pattern="yyyy-MM-dd HH:mm:ss"/>" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
</div>
</div>
</div>
<h5 class="page-header"></h5>
<div class="row">
<div class="pull-left">
<button type="button" class="btn blue" onclick="page()"> <i class="fa fa-search"></i> <spring:message code="search"/> </button>
<button type="button" class="btn btn-default" onclick="resetx()"> <i class="fa fa-refresh"></i> <spring:message code="reset"/> </button>
</div>
</div>
</div>
<!-- /筛选搜索内容栏 结束-->
</form:form>
</div>
<!-- <div class="table-responsive"> -->
<sys:message content="${message}"/>
<table id="contentTable" class="table table-striped table-bordered table-condensed">
<thead>
<tr>
<th><input type="checkbox" class="i-checks" id="checkAll"></th>
<th>协议id</th>
<th>源IP地址</th>
<th>源地址掩码</th>
<th>源端口</th>
<th>源端口掩码</th>
<th>目的IP地址</th>
<th>目的地址掩码</th>
<th>目的端口</th>
<th>目的端口掩码</th>
<th>方向</th>
<th>协议</th>
<th>是否审核</th>
<th>创建人员</th>
<th>配置时间</th>
<th>修改人员</th>
<th>修改时间</th>
<th>审核人员</th>
<th>审核时间</th>
</tr>
</thead>
<tbody>
<c:forEach items="${page.list}" var="specificServiceHostCfg">
<tr>
<td><input type="checkbox" class="i-checks" name="check" id="${specificServiceHostCfg.hostId}" value="${specificServiceHostCfg.isAudit}"></td>
<td>${specificServiceHostCfg.specServiceId }</td>
<td>${specificServiceHostCfg.srcIp }</td>
<td>${specificServiceHostCfg.srcIpMask }</td>
<td>${specificServiceHostCfg.srcPort }</td>
<td>${specificServiceHostCfg.srcPortMask }</td>
<td>${specificServiceHostCfg.dstIp }</td>
<td>${specificServiceHostCfg.dstIpMask }</td>
<td>${specificServiceHostCfg.dstPort }</td>
<td>${specificServiceHostCfg.dstPortMask }</td>
<td>${fns:getDictLabel("SPEC_DIRECTION",specificServiceHostCfg.direction,"0")}</td>
<td>${fns:getDictLabel("SPEC_PROTOCOL",specificServiceHostCfg.protocol,"0")}</td>
<td>${fns:getDictLabel("SPEC_AUDIT",specificServiceHostCfg.isAudit,"0")}</td>
<td>${fns:getUserById(specificServiceHostCfg.creator.id).name}</td>
<td><fmt:formatDate value="${specificServiceHostCfg.createTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td>${fns:getUserById(specificServiceHostCfg.editor.id).name}</td>
<td><fmt:formatDate value="${specificServiceHostCfg.editTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td>${fns:getUserById(specificServiceHostCfg.auditor.id==null?0:specificServiceHostCfg.auditor.id).name}</td>
<td><fmt:formatDate value="${specificServiceHostCfg.auditTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="page">${page}</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>