452 lines
19 KiB
Plaintext
452 lines
19 KiB
Plaintext
|
|
<%@ page contentType="text/html;charset=UTF-8"%>
|
|||
|
|
<%@ include file="/WEB-INF/include/taglib.jsp"%>
|
|||
|
|
<html>
|
|||
|
|
<head>
|
|||
|
|
<title><spring:message code="url_group_configuration"></spring:message></title>
|
|||
|
|
<script type="text/javascript">
|
|||
|
|
var defaultIpInfo;
|
|||
|
|
var protectedList = [".com"];
|
|||
|
|
$(function(){
|
|||
|
|
|
|||
|
|
defaultIpInfo=$(".strInfo").clone(true);
|
|||
|
|
|
|||
|
|
// reSort($(defaultIpInfo),-1);
|
|||
|
|
$(".asnIpAdd").click();
|
|||
|
|
$("#cfgFrom").validate({
|
|||
|
|
errorPlacement: function(error,element){
|
|||
|
|
if($(element).parents().hasClass("tagsinput")){
|
|||
|
|
$(element).parents(".col-md-6").next("div").append(error);
|
|||
|
|
}else{
|
|||
|
|
$(element).parents(".form-group").find("div[for='"+element.attr("name")+"']").append(error);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
submitHandler: function(form){
|
|||
|
|
/* $("[name='country']").val($("[name='userRegion1'] option:selected").attr("country"));
|
|||
|
|
$("[name='detail']").val($("[name='userRegion1'] option:selected").attr("detail"));
|
|||
|
|
$("[name='asnIpGroup']").val($("[name='userRegion1'] option:selected").attr("asnIpGroup")); */
|
|||
|
|
var flag = true;
|
|||
|
|
/* $(".boxSolid:visible").find("input[name$='cfgKeywords']").each(function(){
|
|||
|
|
if($(this).val()==''){
|
|||
|
|
$(this).parents(".form-group").find(
|
|||
|
|
"div[for='"
|
|||
|
|
+ $(this).attr("name")
|
|||
|
|
+ "']").html("<label id=\"cfgKeywordsError\" class=\"error\">"+$("#keywordError").text()+"</label>");
|
|||
|
|
flag = false;
|
|||
|
|
}
|
|||
|
|
}); */
|
|||
|
|
$(".tagsinput:visible").each(function(){
|
|||
|
|
var text='';
|
|||
|
|
$(this).find(".tag").each(function(){
|
|||
|
|
text+=$(this).children("span").text().trim();
|
|||
|
|
});
|
|||
|
|
if(text.length < 4 || text.length > 1024){
|
|||
|
|
$(this).parents(".col-md-6").next("div").html("<label id=\"cfgKeywordsError\" class=\"error\">"+$.validator.messages.keywordLength+"</label>");
|
|||
|
|
if(flag){
|
|||
|
|
flag=false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
if(flag){
|
|||
|
|
loading('onloading...');
|
|||
|
|
form.submit();
|
|||
|
|
}else{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
errorContainer: "#messageBox",
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
//业务窗口打开
|
|||
|
|
var addContent = function(obj, contentClassName) {
|
|||
|
|
var showDiv = $(obj).parent().parent().siblings("."+contentClassName).last();
|
|||
|
|
if(showDiv.hasClass("hidden")){
|
|||
|
|
$(showDiv).removeClass("hidden").removeClass(
|
|||
|
|
"disabled");
|
|||
|
|
}else{
|
|||
|
|
var additional=defaultIpInfo.clone();
|
|||
|
|
additional.removeClass("hidden").removeClass(
|
|||
|
|
"disabled");
|
|||
|
|
showDiv.after(additional);
|
|||
|
|
}
|
|||
|
|
var index=0;
|
|||
|
|
$("."+contentClassName).each(function(){
|
|||
|
|
reSort($(this),index);
|
|||
|
|
// $(".tags").attr("id","tags_"+index);
|
|||
|
|
$("input[name='urlCommGroupList["+index+"].cfgKeywords']").attr("id","tags_"+index);
|
|||
|
|
index++;
|
|||
|
|
});
|
|||
|
|
$(".selectpicker").selectpicker("render");
|
|||
|
|
|
|||
|
|
var flag1=0;
|
|||
|
|
$(".tagsinput").each(function(){
|
|||
|
|
$(this).attr("id","tags_"+flag1+"_tagsinput");
|
|||
|
|
if(flag1>0 && flag1==($(".tagsinput").length-1)){
|
|||
|
|
$("#tags_"+flag1+"_tagsinput").remove();
|
|||
|
|
inputToDiv();
|
|||
|
|
}
|
|||
|
|
flag1++;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//业务窗口关闭
|
|||
|
|
var delContent = function(obj,contentClassName) {
|
|||
|
|
if($("."+contentClassName).length==1){
|
|||
|
|
top.$.jBox.tip("<spring:message code='one_more'/>");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
$(obj).parents("."+contentClassName).remove();
|
|||
|
|
var index=0;
|
|||
|
|
$("."+contentClassName).each(function(){
|
|||
|
|
reSort($(this),index);
|
|||
|
|
index++;
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
var reSort=function(obj,index){
|
|||
|
|
$(obj).find("input,select").each(function(){
|
|||
|
|
var name=$(this).attr("name");
|
|||
|
|
if(name != undefined){
|
|||
|
|
if(name.indexOf("urlCommGroupList[")>-1){
|
|||
|
|
var namePrefix="urlCommGroupList[";
|
|||
|
|
var nameSubfix=name.substring(name.indexOf("]"));
|
|||
|
|
var nameNew=namePrefix+index+nameSubfix;
|
|||
|
|
// $(".tags").attr("id","tags_"+index);
|
|||
|
|
if(nameNew!=name){
|
|||
|
|
$(this).attr("name",nameNew);
|
|||
|
|
$(this).parents(".form-group").find("div[for='"+name+"']").attr("for",nameNew);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
//input框标签化方法
|
|||
|
|
function inputToDiv(){
|
|||
|
|
|
|||
|
|
var tagsInputSettings1="#tags";
|
|||
|
|
var options;
|
|||
|
|
var flag2=0;
|
|||
|
|
$("input[name$='cfgKeywords']").each(function(){
|
|||
|
|
var tagsId = $(this).attr("id");
|
|||
|
|
var objNamePrefix = $(this).attr("name").split("cfgKeywords")[0];
|
|||
|
|
var isTags = $(this).hasClass("tags");//有tags样式的关键字输入框才需处理
|
|||
|
|
if(typeof(tagsId)!=='undefined' && tagsId.indexOf("tags_")!=-1 && isTags){
|
|||
|
|
// 表达式类型初始
|
|||
|
|
if($("input:radio[name='"+objNamePrefix+"exprType'][checked=checked]").val()==1){
|
|||
|
|
options = $("select[name='"+objNamePrefix+"matchMethod']").find("option[value!=0]");
|
|||
|
|
$("select[name='"+objNamePrefix+"matchMethod']").find("option[value!=0]").remove();
|
|||
|
|
}else{
|
|||
|
|
options = $("select[name='"+objNamePrefix+"matchMethod']").find("option[value!=0]");
|
|||
|
|
}
|
|||
|
|
//表单中如果有关键字内容可能输入多个关键字的情况,根据输入关键字个数确定表达式选中情况,不允许手动选中
|
|||
|
|
if($("select[name='"+objNamePrefix+"district']").val()!="Payload"){//如果是app 的payload特征,可选择表达式
|
|||
|
|
$("input:radio[name='"+objNamePrefix+"exprType']").attr("disabled",true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(tagsId !="tags_0" && flag2>0 && flag2==($("input[name$='cfgKeywords']").length-1)){
|
|||
|
|
tagsInputSettings1 = tagsInputSettings1+",#"+tagsId;
|
|||
|
|
}
|
|||
|
|
flag2++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
$(tagsInputSettings1).tagsInput({
|
|||
|
|
width:$(tagsInputSettings1).find(".form-control").width(),
|
|||
|
|
defaultText:'please input keywords',
|
|||
|
|
'delimiter':'***and***',//特殊字符串分隔与表达式的多关键词
|
|||
|
|
maxCount:4,
|
|||
|
|
onAddTag:function(tag,size){
|
|||
|
|
var reg = new RegExp(/\t|\r|\n/);
|
|||
|
|
/* if (tag.match(reg)) {
|
|||
|
|
$(this).parent(".col-md-6").next("div").html("<label class='error'>"+$.validator.messages.hasInvisibleChar.replace("{0}","'"+tag+"'")+"</label>");
|
|||
|
|
}else{
|
|||
|
|
$(this).parent(".col-md-6").next("div").html("");
|
|||
|
|
} */
|
|||
|
|
//var keywordValue = "";
|
|||
|
|
var objNamePrefix = $(this).attr("name").split("cfgKeywords")[0];
|
|||
|
|
/*$("span[class='tag']").each(function(){
|
|||
|
|
keywordValue = keywordValue+"***iie***"+$(this).find("span").text().trim();
|
|||
|
|
});
|
|||
|
|
$(this).prev("input[name$='cfgKeywords']").val(keywordValue);*/
|
|||
|
|
exprTypeChecked(objNamePrefix,size,options);
|
|||
|
|
if($(this).hasClass("urlCheck")){
|
|||
|
|
protectedListWarn($("#"+$(this).attr("id")+"_tagsinput"),$(this).val(),protectedList);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onRemoveTag:function(tag,size){
|
|||
|
|
// $(this).parent(".col-md-6").next("div").html("");
|
|||
|
|
//var keywordValue = "";
|
|||
|
|
var objNamePrefix = $(this).attr("name").split("cfgKeywords")[0];
|
|||
|
|
/*$("span[class='tag']").each(function(){
|
|||
|
|
keywordValue = keywordValue+"***iie***"+$(this).find("span").text().trim();
|
|||
|
|
});
|
|||
|
|
$(this).prev("input[name$='cfgKeywords']").val(keywordValue);*/
|
|||
|
|
exprTypeChecked(objNamePrefix,size,options);
|
|||
|
|
if($(this).hasClass("urlCheck")){
|
|||
|
|
protectedListWarn($("#"+$(this).attr("id")+"_tagsinput"),$(this).val(),protectedList);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
$(".tagsinput").popover({
|
|||
|
|
animation:true,
|
|||
|
|
container:'body',
|
|||
|
|
placement:'right',
|
|||
|
|
html:true,
|
|||
|
|
trigger:"hover",
|
|||
|
|
title:"",
|
|||
|
|
content:function(){
|
|||
|
|
var content = $("#tagsinputTip").text();
|
|||
|
|
return content;
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
</script>
|
|||
|
|
</head>
|
|||
|
|
<body>
|
|||
|
|
<span id="keywordError" style="display:none"><spring:message code="required"></spring:message></span>
|
|||
|
|
<span id="tagsinputTip" style="display:none"><spring:message code="multiple_keywords_tip"></spring:message></span>
|
|||
|
|
<div class="page-content">
|
|||
|
|
|
|||
|
|
<h3 class="page-title">
|
|||
|
|
<spring:message code="url_group_configuration"></spring:message>
|
|||
|
|
</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="add"></spring:message>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="portlet-body form">
|
|||
|
|
<!-- BEGIN FORM-->
|
|||
|
|
<form id="cfgFrom" action="${ctx}/basics/url/save" method="post" class="form-horizontal">
|
|||
|
|
<input type="hidden" name="functionId" value="${_cfg.functionId}">
|
|||
|
|
<input type="hidden" id="isAreaEffective" name="isAreaEffective" value="0">
|
|||
|
|
<input type="hidden" id="compileId" name="compileId" value="0">
|
|||
|
|
<input type="hidden" id="requestId" name="requestId" value="0">
|
|||
|
|
<input type="hidden" id="asnIpGroup" name="asnIpGroup" value="0">
|
|||
|
|
<c:forEach items="${serviceList}" var="service">
|
|||
|
|
<input type="hidden" id="serviceId" name="serviceId" value="${service.serviceId}">
|
|||
|
|
<input type="hidden" id="action" name="action" value="${service.action}">
|
|||
|
|
</c:forEach>
|
|||
|
|
<!-- 配置域类型 -->
|
|||
|
|
<c:forEach items="${regionList}" var="region">
|
|||
|
|
<c:if test="${_cfg.functionId eq region.functionId}">
|
|||
|
|
<input type="hidden" name="cfgType" value="${region.configRegionValue}">
|
|||
|
|
<input type="hidden" name="cfgRegionCode"
|
|||
|
|
isMaat="${region.isMaat}"
|
|||
|
|
serviceType="${region.configServiceType}"
|
|||
|
|
ipPortShow="${region.configIpPortShow}"
|
|||
|
|
ipType="${region.configIpType}"
|
|||
|
|
srcIpPattern="${fn:split(region.configIpPattern,';')[0]}"
|
|||
|
|
destIpPattern="${fn:split(region.configIpPattern,';')[1]}"
|
|||
|
|
srcPortPattern="${fn:split(region.configPortPattern,';')[0]}"
|
|||
|
|
destPortPattern="${fn:split(region.configPortPattern,';')[1]}"
|
|||
|
|
direction="${region.configDirection}"
|
|||
|
|
protocol="${region.configProtocol}"
|
|||
|
|
regionType="${region.regionType}"
|
|||
|
|
value="${region.configRegionCode}">
|
|||
|
|
</c:if>
|
|||
|
|
</c:forEach>
|
|||
|
|
<div class="form-body">
|
|||
|
|
<!-- desc and action -->
|
|||
|
|
<div class="row">
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<div class="form-group">
|
|||
|
|
<label class="control-label col-md-3"><spring:message code="config_describe"/></label>
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<input class="form-control" type="text" name="cfgDesc" value="${_cfg.cfgDesc}">
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<div class="form-group">
|
|||
|
|
<label class="control-label col-md-3"><font color="red">*</font><spring:message code="urlGroup"/></label>
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<select name="userRegion3" data-live-search="true" data-live-search-placeholder="search" class="selectpicker form-control required">
|
|||
|
|
<option value=""><spring:message code="select"/></option>
|
|||
|
|
<c:forEach items="${policyGroupInfos}" var="urlGroupInfo">
|
|||
|
|
<option value="${urlGroupInfo.serviceGroupId}">${urlGroupInfo.groupName}</option>
|
|||
|
|
</c:forEach>
|
|||
|
|
</select>
|
|||
|
|
</div>
|
|||
|
|
<div for="userRegion3"></div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- desc and action -->
|
|||
|
|
<h4 class="form-section">
|
|||
|
|
<spring:message code="http_url_title" />
|
|||
|
|
<small> <span
|
|||
|
|
class="glyphicon glyphicon-plus asnIpAdd"
|
|||
|
|
onClick="addContent(this,'strInfo')" title="add"></span></small>
|
|||
|
|
</h4>
|
|||
|
|
<div class="row strInfo boxSolid asnIp hidden disabled">
|
|||
|
|
<!-- <input type="hidden" name="asnIpCfgs[0].protocolId" value="0"> -->
|
|||
|
|
<div class="row">
|
|||
|
|
<div class="pull-right">
|
|||
|
|
<span class="glyphicon glyphicon-remove pull-right" title="remove"
|
|||
|
|
onClick="delContent(this,'strInfo');" />
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<c:forEach items="${regionList}" var="region" varStatus="status">
|
|||
|
|
<%-- <c:set var="cfgName" value="urlCommGroupList[-1]"></c:set> --%>
|
|||
|
|
<%-- <input type="hidden" name="${cfgName}.sourceCompileId" value="${cfg.sourceCompileId }"> --%>
|
|||
|
|
|
|||
|
|
<div class="row">
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<div class="form-group">
|
|||
|
|
<label class="control-label col-md-3"><font color="red">*</font>
|
|||
|
|
<spring:message code="keywords" />
|
|||
|
|
</label>
|
|||
|
|
<!-- 此配置的关键词可以输入多个关键词 -->
|
|||
|
|
<c:if test="${region.configMultiKeywords eq 1}">
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<input class="form-control required tags <c:if test="${fn:containsIgnoreCase(region.configServiceType,'domain') }"> domainCheck </c:if> <c:if test="${fn:containsIgnoreCase(region.configServiceType,'url') }"> urlCheck </c:if>" type="text" id="tags_${status.index}"
|
|||
|
|
name="urlCommGroupList[-1].cfgKeywords"
|
|||
|
|
>
|
|||
|
|
</div>
|
|||
|
|
</c:if>
|
|||
|
|
<!-- 此配置的关键词不允许输入多个关键词 -->
|
|||
|
|
<c:if test="${(region.configMultiKeywords eq 0) or (empty region.configMultiKeywords)}">
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<input class="form-control required invisibleChar
|
|||
|
|
<c:if test="${fn:containsIgnoreCase(region.configServiceType,'domain') }"> domainCheck </c:if>
|
|||
|
|
<c:if test="${fn:containsIgnoreCase(region.configServiceType,'url') }"> urlCheck </c:if>
|
|||
|
|
"
|
|||
|
|
type="text"
|
|||
|
|
name="urlCommGroupList[-1].cfgKeywords"
|
|||
|
|
>
|
|||
|
|
</div>
|
|||
|
|
</c:if>
|
|||
|
|
<div for="urlCommGroupList[-1].cfgKeywords"></div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="row">
|
|||
|
|
<div class="col-md-6 exprType">
|
|||
|
|
<div class="form-group">
|
|||
|
|
|
|||
|
|
<label class="control-label col-md-3"><font color="red">*</font>
|
|||
|
|
<spring:message code="expression_type" /></label>
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<c:if test="${!empty region.configExprType}">
|
|||
|
|
<c:forEach var="exprType" items="${fn:split(region.configExprType,',')}" varStatus="stat" >
|
|||
|
|
<c:forEach items="${fns:getDictList('EXPRESSION_TYPE')}" var="exprTypeC" >
|
|||
|
|
<c:if test="${exprTypeC.itemCode eq exprType}">
|
|||
|
|
<label class="radio-inline">
|
|||
|
|
<input type="radio"
|
|||
|
|
name="urlCommGroupList[-1].exprType" value="${exprType }"
|
|||
|
|
class="required"
|
|||
|
|
<c:if test="${stat.index == 0 }"> checked </c:if>
|
|||
|
|
|
|||
|
|
>
|
|||
|
|
<spring:message code="${exprTypeC.itemValue }" />
|
|||
|
|
</label>
|
|||
|
|
</c:if>
|
|||
|
|
</c:forEach>
|
|||
|
|
</c:forEach>
|
|||
|
|
</c:if>
|
|||
|
|
<c:if test="${empty region.configExprType}">
|
|||
|
|
<c:forEach items="${fns:getDictList('EXPRESSION_TYPE')}" var="exprTypeC">
|
|||
|
|
<c:if test="${exprTypeC.itemCode eq 0}">
|
|||
|
|
<label class="radio-inline">
|
|||
|
|
<input type="radio"
|
|||
|
|
name="urlCommGroupList[-1].exprType" value="${exprTypeC.itemCode }"
|
|||
|
|
class="required" checked >
|
|||
|
|
<spring:message code="${exprTypeC.itemValue }" />
|
|||
|
|
</label>
|
|||
|
|
</c:if>
|
|||
|
|
</c:forEach>
|
|||
|
|
</c:if>
|
|||
|
|
</div>
|
|||
|
|
<div for="urlCommGroupList[-1].exprType"></div>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div class="col-md-6 matchMethod">
|
|||
|
|
<div class="form-group ">
|
|||
|
|
<label class="control-label col-md-3"><font color="red">*</font>
|
|||
|
|
<spring:message code="match_method" /></label>
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<select name="urlCommGroupList[-1].matchMethod"
|
|||
|
|
class="selectpicker select2 form-control required ">
|
|||
|
|
<c:if test="${!empty region.configMatchMethod}">
|
|||
|
|
<c:forEach var="matchMethod" items="${fn:split(region.configMatchMethod,',')}">
|
|||
|
|
<c:forEach items="${fns:getDictList('MATCH_METHOD')}" var="matchMethodC">
|
|||
|
|
<c:if test="${matchMethodC.itemCode eq matchMethod}">
|
|||
|
|
<option value="${matchMethodC.itemCode}"
|
|||
|
|
>
|
|||
|
|
<spring:message code="${matchMethodC.itemValue}"/>
|
|||
|
|
</option>
|
|||
|
|
</c:if>
|
|||
|
|
|
|||
|
|
</c:forEach>
|
|||
|
|
</c:forEach>
|
|||
|
|
</c:if>
|
|||
|
|
<c:if test="${empty region.configMatchMethod}">
|
|||
|
|
<c:forEach items="${fns:getDictList('MATCH_METHOD')}" var="matchMethodC">
|
|||
|
|
<c:if test="${matchMethodC.itemCode eq 0}">
|
|||
|
|
<option value="${matchMethodC.itemCode}"
|
|||
|
|
selected
|
|||
|
|
>
|
|||
|
|
<spring:message code="${matchMethodC.itemValue}"/>
|
|||
|
|
</option>
|
|||
|
|
</c:if>
|
|||
|
|
|
|||
|
|
</c:forEach>
|
|||
|
|
</c:if>
|
|||
|
|
</select>
|
|||
|
|
</div>
|
|||
|
|
<div for="urlCommGroupList[-1].matchMethod"></div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
|
|||
|
|
</c:forEach>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<%-- <div class="row">
|
|||
|
|
<button type="button" class="btn btn-red-hollow center-block"
|
|||
|
|
onClick="more(this);" data-click-times="0">
|
|||
|
|
<spring:message code="show_more" />
|
|||
|
|
</button>
|
|||
|
|
</div> --%>
|
|||
|
|
|
|||
|
|
|
|||
|
|
<div class="form-actions">
|
|||
|
|
<div class="row">
|
|||
|
|
<div class="col-md-6">
|
|||
|
|
<div class="row">
|
|||
|
|
<div class="col-md-offset-3 col-md-8">
|
|||
|
|
<button id="save" type="submit" class="btn green"><spring:message code="submit"/></button>
|
|||
|
|
<button id="cancel" type="button" class="btn default"><spring:message code="cancel"/></button>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="col-md-6"> </div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</form>
|
|||
|
|
<!-- END FORM-->
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</body>
|
|||
|
|
</html>
|