如图实现动态显示日期,再根据日期查询出表,显示表名根据表名,进行查询导出操作。
1. 配置
<action path="/selectRiskData" type="ctd.cedcx.web.action.ActionCedcx"
name="FormCedcx" parameter="selectRiskData" scope="request">
<forward name="success" path="/cedcx/2018init_RiskData_info.jsp" />
</action>
<action path="/exportRiskData" type="ctd.cedcx.web.action.ActionCedcx"
name="FormCedcx" parameter="exportRiskData" scope="request">
<forward name="success" path="/cedcx/2018init_RiskData_info.jsp" />
</action>
2. 前端页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/pub/include/common.jsp"%>
<html>
<head>
<title>偿二代结果</title>
<base target="_self">
<script language="Javascript" defer="defer" src="<%=path%>/pub/js/myDateControler/WdatePicker.js"></script>
</head>
<body>
<form id="form1" action="init_RiskData.do" method="post" >
<input type="hidden" name="pageNo" value="${frmCedcx.pageNo}" />
<input type="hidden" name="rowsPerPage" value="${frmCedcx.rowsPerPage}" />
<table id="tableWorkBook" cellpadding="0" cellspacing="0" width="90%" align="center" >
<tr height="30" align="left">
<td width="30%" height="40">
<b>偿二代结果</b>
</td>
</tr>
<tr>
<td>数据日期:</td>
</tr>
<tr align="left" bgcolor="#87CEFA">
<td align="left" bgcolor="#87CEFA">
<c:forEach items="${listdataDate }" var="map" varStatus="cnt" >
<input type="radio" name="d_date" ${not empty frmCedcx.d_date ? (frmCedcx.d_date == map.d_date ? "checked" : "") : (cnt.index == 0 ? "checked" : "")} value="${map.d_date }" >${map.d_date }
</c:forEach>
</td>
</tr>
<tr> </tr>
</table>
<table id="tableName" cellpadding="0" cellspacing="0" width="90%" align="center" border="1">
<tr width="100%" >
<td>偿二代表名:</td>
</tr>
<c:forEach items="${list}" var="map" varStatus="cnt" >
<td align="left" bgcolor="#87CEFA">
<input type="radio" name="t_tname" ${not empty frmCedcx.t_tname ? (frmCedcx.t_tname == map.TAB_NO ? "checked" : "") : (cnt.index == 0 ? "checked" : "")} value="${map.TAB_NO }" >${map.TAB_NAME }
</td>
<c:if test="${cnt.count%3==0}" >
<tr bgcolor="#87CEFA">
</c:if>
</c:forEach>
</tr >
</table>
<table width="90%" border="0" cellspacing="0" cellpadding="1" align="center">
<tr>
<td width="30%" align="right" height="40" >
<input type="button" onclick="selectRiskData('<%=path%>')" value="查询" class="blueTr9" />
<input type="button" id="export_cedcx" onclick="exportRiskData('<%=path%>')" value="导出" class="blueTr9" />
<input type="button" id="export_report" onclick="export_report1('<%=path%>');" value="导出报表" class="blueTr9" />
<!-- value="${frmParameter.SelectPName }" -->
</td>
</tr>
</table>
<table></table>
<table id="tablist" width="90%" border="1" cellspacing="0" cellpadding="1" align="center">
<tr class="title" align="center" >
<c:forEach items="${listMap }" var="map" varStatus="cnt" >
<th align="center" height="22">${map.PARA_NAME }</th>
</c:forEach>
</tr>
<c:forEach items="${resultList }" var="resultList" varStatus="cnt">
<tr class="${cnt.index%2 == 0 ? 'odd' : 'even'}" height="35">
<c:forEach items="${listMap}" var="listMap">
<td>
<c:if test="${listMap.PARA_TYPE == 'N'}" >
${app:numericFormat(resultList[listMap.PARA_CODE],2,true)}
</c:if>
<c:if test="${listMap.PARA_TYPE != 'N'}" >
${resultList[listMap.PARA_CODE]}
</c:if>
</c:forEach>
</td>
</tr>
</c:forEach>
</table>
<table width="100%" align="center" id="navigate" >
<tr><td align="right"><app:navigate objectName="FormCedcx"/></td></tr>
</table>
</form>
</body>
<SCRIPT LANGUAGE="JavaScript">
<c:if test="${not empty uploadMessage}">
alert("${uploadMessage}");
returnValue="${uploadResult}";
window.close();
</c:if>
function selectRiskData(path){
var form1 = document.forms[0];
form1.d_date.value = getRadioObjValue("d_date");
form1.t_tname.value = getRadioTableValue("t_tname");
form1.target="_self";
form1.action=path + "/selectRiskData.do";
form1.submit();
}
function exportRiskData(path,action_value){
var form1 = document.forms[0];
form1.d_date.value = getRadioObjValue("d_date");
form1.t_tname.value = getRadioTableValue("t_tname");
form1.target="_self";
form1.action=path + "/exportRiskData.do";
form1.submit();
form1.action=path + "/selectRiskData.do";
}
function export_report1(path,action_value){
var form1 = document.forms[0];
form1.d_date.value = getRadioObjValue("d_date");
form1.target="_self";
form1.action=path + "/exportCtdReport.do";
form1.submit();
form1.action=path + "/init_RiskData.do";
}
//获取表名
function getRadioTableValue(obj_name){
var str = "";
jQuery("#tableName").find("input[type=radio][name='"+obj_name+"']").each(function(){
if(jQuery(this).attr("checked")){
str = jQuery(this).val();
}
});
return str;
}
//获取日期
function getRadioObjValue(obj_name){
var str = "";
jQuery("#tableWorkBook").find("input[type=radio][name='"+obj_name+"']").each(function(){
if(jQuery(this).attr("checked")){
str = jQuery(this).val();
}
});
return str;
}
</SCRIPT>
</html>
《如果希望获得最佳表单传输性能,可以采用 GET 方法发送只有少数简短字段的小表单。
一些服务器操作系统在处理可以立即传递给应用程序的命令行参数时,会限制其数目和长度,在这种情况下,对那些有许多字段或是很长的文本域的表单来说,
就应该采用 POST 方法来发送。》
<input type="hidden" name="pageNo" value="${frmCedcx.pageNo}" />
<input type="hidden" name="rowsPerPage" value="${frmCedcx.rowsPerPage}" />
<table id="tableWorkBook" cellpadding="0" cellspacing="0" width="90%" align="center" >
<tr height="30" align="left">
<td width="30%" height="40">
<b>偿二代结果</b>
</td>
</tr>
<tr>
<td>数据日期:</td>
</tr>
<tr align="left" bgcolor="#87CEFA">
<td align="left" bgcolor="#87CEFA"> 《c:forEach var="每个变量名字" items="要迭代的list" varStatus="每个对象的状态" begin="循环从哪儿开始" end="循环到哪儿结束" step="循环的步长"》
<c:forEach items="${listdataDate }" var="map" varStatus="cnt" >
<input type="radio" name="d_date" ${not empty frmCedcx.d_date ? (frmCedcx.d_date == map.d_date ? "checked" : "") : (cnt.index == 0 ? "checked" : "")} value="${map.d_date }" >${map.d_date }
</c:forEach>
</td>
</tr>
<tr> </tr>
</table>
<table id="tableName" cellpadding="0" cellspacing="0" width="90%" align="center" border="1">
<tr width="100%" >
<td>偿二代表名:</td>
</tr>
<c:forEach items="${list}" var="map" varStatus="cnt" >
<td align="left" bgcolor="#87CEFA">
<input type="radio" name="t_tname" ${not empty frmCedcx.t_tname ? (frmCedcx.t_tname == map.TAB_NO ? "checked" : "") : (cnt.index == 0 ? "checked" : "")} value="${map.TAB_NO }" >${map.TAB_NAME }
</td>
<c:if test="${cnt.count%3==0}" >
<tr bgcolor="#87CEFA">
</c:if>
</c:forEach>
</tr >
</table>
<table width="90%" border="0" cellspacing="0" cellpadding="1" align="center">
<tr>
<td width="30%" align="right" height="40" >
<input type="button" onclick="selectRiskData('<%=path%>')" value="查询" class="blueTr9" />
<input type="button" id="export_cedcx" onclick="exportRiskData('<%=path%>')" value="导出" class="blueTr9" />
<input type="button" id="export_report" onclick="export_report1('<%=path%>');" value="导出报表" class="blueTr9" />
<!-- value="${frmParameter.SelectPName }" -->
</td>
</tr>
</table>
<table></table>
<table id="tablist" width="90%" border="1" cellspacing="0" cellpadding="1" align="center">
<tr class="title" align="center" >
<c:forEach items="${listMap }" var="map" varStatus="cnt" >
<th align="center" height="22">${map.PARA_NAME }</th>
</c:forEach>
</tr>
<c:forEach items="${resultList }" var="resultList" varStatus="cnt">
<tr class="${cnt.index%2 == 0 ? 'odd' : 'even'}" height="35">
<c:forEach items="${listMap}" var="listMap">
<td>
<c:if test="${listMap.PARA_TYPE == 'N'}" > 《判断数据类型是varchar还是num,数字则保留两位小数,千分位》
${app:numericFormat(resultList[listMap.PARA_CODE],2,true)}
</c:if>
<c:if test="${listMap.PARA_TYPE != 'N'}" >
${resultList[listMap.PARA_CODE]}
</c:if>
</c:forEach>
</td>
</tr>
</c:forEach>
</table>
<table width="100%" align="center" id="navigate" >
<tr><td align="right"><app:navigate objectName="FormCedcx"/></td></tr>
</table>
</form>
</body>
<SCRIPT LANGUAGE="JavaScript">
<c:if test="${not empty uploadMessage}">
alert("${uploadMessage}");
returnValue="${uploadResult}";
window.close();
</c:if>
</SCRIPT>
</html>
3. Java部分
List listdataDate = new CommonMethod().queryDateDataList();
// 传到前端
request.setAttribute("listdataDate", listdataDate);
// 取出表名
List list = getBO().queryExpCtdDataListDataInfo();
// 传表名
request.setAttribute("list", list);
FormCedcx frm = (FormCedcx) form;
FormUserOperation userOp = Constant.getFormUserOperation(request);
List listTablename = getBO().queryExpCtdDataListDataInfoByTabNO(frm);
// 设置每页行数
if (frm.getRowsPerPage() == 0) {
frm.setRowsPerPage(20);
}
if (listTablename != null && listTablename.size() > 0) {
Map map = (Map) listTablename.get(0);
String tab_no = (String) map.get("TAB_NO");
String prod_type = (String) map.get("PROD_TYPE");
List listMap = getBO().queryExpCtdDataMapList(tab_no);
request.setAttribute("listMap", listMap);
if (listMap != null && listMap.size() > 0) {
// 取得对应的偿二代数据
List resultList = getBO().queryCtdResultByReport(frm, listMap,
prod_type);
request.setAttribute("resultList", resultList);
}
}
request.setAttribute("frmCedcx", frm);
return mapping.findForward("success");
//到处对应表
FormCedcx frm = (FormCedcx) form;
FormUserOperation userOp = Constant.getFormUserOperation(request);
List list = getBO().queryExpCtdDataListDataInfoByTabNO(frm);
Map resultMap = new LinkedHashMap();
Map map = (Map) list.get(0); // 根据序号获取对应的表
String sheet_name = (String) map.get("TAB_NAME");
String tab_no = (String) map.get("TAB_NO");
String prod_type = (String) map.get("PROD_TYPE");
List list_exp = new ArrayList();
// 取得对应导出表映射
List listMap = getBO().queryExpCtdDataMapList(tab_no);
String[][] detalData = null;
if (listMap != null && listMap.size() > 0) {
// 取得对应的偿二代数据
List resultList = getBO().queryCtdResultByReport(frm, listMap,
prod_type);
detalData = new String[resultList.size() + 1][listMap.size()];
for (int j = 0; j < resultList.size(); j++) {
Map map1 = (Map) resultList.get(j);
for (int k = 0; k < listMap.size(); k++) {
Map map2 = (Map) listMap.get(k);
String para_code = (String) map2.get("PARA_CODE");
String para_name = (String) map2.get("PARA_NAME");
detalData[0][k] = para_name;
Object ob_value = map1.get(para_code.toUpperCase());
if (ob_value == null || ob_value.equals("")) {
ob_value = "0";
}
detalData[j + 1][k] = String.valueOf(ob_value);
}
}
}
list_exp.add(detalData);
resultMap.put(sheet_name, list_exp);
String file_name = "偿二代报表";
// 导出信息到excel
OutputStream out = response.getOutputStream();
response.reset();
response.setContentType("application/x-download");
response.setHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode(file_name, "UTF-8") + ".xls");
try {
ExportToExcelByPOI.write(out, resultMap, "two", "", "");
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
数据库 public List queryDateDataList() {
// TODO Auto-generated method stub
String sql=" select distinct to_char(t.d_date,'yyyy-MM-dd') d_date from T_BASIC_DATA_INFO t order by d_date desc ";
List list = new ArrayList();
list = jdbcTemplate.queryForList(sql);
return list;
}
4. 调用的方法
WdatePicker的JS
/*
* My97 DatePicker 4.72 Release
* License: http://www.my97.net/dp/license.asp
*/
var $dp,WdatePicker;(function(){var _={
$wdate:true,
$dpPath:"",
$crossFrame:true,
doubleCalendar:false,
enableKeyboard:true,
enableInputMask:true,
autoUpdateOnChanged:null,
whichDayIsfirstWeek:4,
position:{},
lang:"auto",
skin:"default",
dateFmt:"yyyy-MM-dd",
realDateFmt:"yyyy-MM-dd",
realTimeFmt:"HH:mm:ss",
realFullFmt:"%Date %Time",
minDate:"1900-01-01 00:00:00",
maxDate:"2099-12-31 23:59:59",
startDate:"",
alwaysUseStartDate:false,
yearOffset:1911,
firstDayOfWeek:0,
isShowWeek:false,
highLineWeekDay:true,
isShowClear:true,
isShowToday:true,
isShowOK:true,
isShowOthers:true,
readOnly:false,
errDealMode:0,
autoPickDate:null,
qsEnabled:true,
autoShowQS:false,
specialDates:null,specialDays:null,disabledDates:null,disabledDays:null,opposite:false,onpicking:null,onpicked:null,onclearing:null,oncleared:null,ychanging:null,ychanged:null,Mchanging:null,Mchanged:null,dchanging:null,dchanged:null,Hchanging:null,Hchanged:null,mchanging:null,mchanged:null,schanging:null,schanged:null,eCont:null,vel:null,errMsg:"",quickSel:[],has:{}};WdatePicker=U;var X=window,O="document",J="documentElement",C="getElementsByTagName",V,A,T,I,b;switch(navigator.appName){case"Microsoft Internet Explorer":T=true;break;case"Opera":b=true;break;default:I=true;break}A=L();if(_.$wdate)M(A+"skin/WdatePicker.css");V=X;if(_.$crossFrame){try{while(V.parent&&V.parent[O]!=V[O]&&V.parent[O][C]("frameset").length==0)V=V.parent}catch(P){}}if(!V.$dp)V.$dp={ff:I,ie:T,opera:b,el:null,win:X,status:0,defMinDate:_.minDate,defMaxDate:_.maxDate,flatCfgs:[]};B();if($dp.status==0)Z(X,function(){U(null,true)});if(!X[O].docMD){E(X[O],"onmousedown",D);X[O].docMD=true}if(!V[O].docMD){E(V[O],"onmousedown",D);V[O].docMD=true}E(X,"onunload",function(){if($dp.dd)Q($dp.dd,"none")});function B(){V.$dp=V.$dp||{};obj={$:function($){return(typeof $=="string")?X[O].getElementById($):$},$D:function($,_){return this.$DV(this.$($).value,_)},$DV:function(_,$){if(_!=""){this.dt=$dp.cal.splitDate(_,$dp.cal.dateFmt);if($)for(var B in $)if(this.dt[B]===undefined)this.errMsg="invalid property:"+B;else{this.dt[B]+=$[B];if(B=="M"){var C=$["M"]>0?1:0,A=new Date(this.dt["y"],this.dt["M"],0).getDate();this.dt["d"]=Math.min(A+C,this.dt["d"])}}if(this.dt.refresh())return this.dt}return""},show:function(){var A=V[O].getElementsByTagName("div"),$=100000;for(var B=0;B<A.length;B++){var _=parseInt(A[B].style.zIndex);if(_>$)$=_}this.dd.style.zIndex=$+2;Q(this.dd,"block")},hide:function(){Q(this.dd,"none")},attachEvent:E};for(var $ in obj)V.$dp[$]=obj[$];$dp=V.$dp;$dp.dd=V[O].getElementById("_my97DP")}function E(A,$,_){if(T)A.attachEvent($,_);else if(_){var B=$.replace(/on/,"");_._ieEmuEventHandler=function($){return _($)};A.addEventListener(B,_._ieEmuEventHandler,false)}}function L(){var _,A,$=X[O][C]("script");for(var B=0;B<$.length;B++){_=$[B].src.substring(0,$[B].src.toLowerCase().indexOf("wdatepicker.js"));A=_.lastIndexOf("/");if(A>0)_=_.substring(0,A+1);if(_)break}return _}function F(F){var E,C;if(F.substring(0,1)!="/"&&F.indexOf("://")==-1){E=V.location.href;C=location.href;if(E.indexOf("?")>-1)E=E.substring(0,E.indexOf("?"));if(C.indexOf("?")>-1)C=C.substring(0,C.indexOf("?"));var G,I,$="",D="",A="",J,H,B="";for(J=0;J<Math.max(E.length,C.length);J++){G=E.charAt(J).toLowerCase();I=C.charAt(J).toLowerCase();if(G==I){if(G=="/")H=J}else{$=E.substring(H+1,E.length);$=$.substring(0,$.lastIndexOf("/"));D=C.substring(H+1,C.length);D=D.substring(0,D.lastIndexOf("/"));break}}if($!="")for(J=0;J<$.split("/").length;J++)B+="../";if(D!="")B+=D+"/";F=E.substring(0,E.lastIndexOf("/")+1)+B+F}_.$dpPath=F}function M(A,$,B){var D=X[O][C]("HEAD").item(0),_=X[O].createElement("link");if(D){_.href=A;_.rel="stylesheet";_.type="text/css";if($)_.title=$;if(B)_.charset=B;D.appendChild(_)}}function Z($,_){E($,"onload",_)}function G($){$=$||V;var A=0,_=0;while($!=V){var D=$.parent[O][C]("iframe");for(var F=0;F<D.length;F++){try{if(D[F].contentWindow==$){var E=W(D[F]);A+=E.left;_+=E.top;break}}catch(B){}}$=$.parent}return{"leftM":A,"topM":_}}function W(F){if(F.getBoundingClientRect)return F.getBoundingClientRect();else{var A={ROOT_TAG:/^body|html$/i,OP_SCROLL:/^(?:inline|table-row)$/i},E=false,H=null,_=F.offsetTop,G=F.offsetLeft,D=F.offsetWidth,B=F.offsetHeight,C=F.offsetParent;if(C!=F)while(C){G+=C.offsetLeft;_+=C.offsetTop;if(S(C,"position").toLowerCase()=="fixed")E=true;else if(C.tagName.toLowerCase()=="body")H=C.ownerDocument.defaultView;C=C.offsetParent}C=F.parentNode;while(C.tagName&&!A.ROOT_TAG.test(C.tagName)){if(C.scrollTop||C.scrollLeft)if(!A.OP_SCROLL.test(Q(C)))if(!b||C.style.overflow!=="visible"){G-=C.scrollLeft;_-=C.scrollTop}C=C.parentNode}if(!E){var $=a(H);G-=$.left;_-=$.top}D+=G;B+=_;return{"left":G,"top":_,"right":D,"bottom":B}}}function N($){$=$||V;var B=$[O],A=($.innerWidth)?$.innerWidth:(B[J]&&B[J].clientWidth)?B[J].clientWidth:B.body.offsetWidth,_=($.innerHeight)?$.innerHeight:(B[J]&&B[J].clientHeight)?B[J].clientHeight:B.body.offsetHeight;return{"width":A,"height":_}}function a($){$=$||V;var B=$[O],A=B[J],_=B.body;B=(A&&A.scrollTop!=null&&(A.scrollTop>_.scrollTop||A.scrollLeft>_.scrollLeft))?A:_;return{"top":B.scrollTop,"left":B.scrollLeft}}function D($){var _=$?($.srcElement||$.target):null;try{if($dp.cal&&!$dp.eCont&&$dp.dd&&_!=$dp.el&&$dp.dd.style.display=="block")$dp.cal.close()}catch($){}}function Y(){$dp.status=2;H()}function H(){if($dp.flatCfgs.length>0){var $=$dp.flatCfgs.shift();$.el={innerHTML:""};$.autoPickDate=true;$.qsEnabled=false;K($)}}var R,$;function U(J,C){$dp.win=X;B();J=J||{};if(C){if(!G()){$=$||setInterval(function(){if(V[O].readyState=="complete")clearInterval($);U(null,true)},50);return}if($dp.status==0){$dp.status=1;K({el:{innerHTML:""}},true)}else return}else if(J.eCont){J.eCont=$dp.$(J.eCont);$dp.flatCfgs.push(J);if($dp.status==2)H()}else{if($dp.status==0){U(null,true);return}if($dp.status!=2)return;var F=D();if(F){$dp.srcEl=F.srcElement||F.target;F.cancelBubble=true}$dp.el=J.el=$dp.$(J.el||$dp.srcEl);if(!$dp.el||$dp.el["My97Mark"]===true||$dp.el.disabled||($dp.el==$dp.el&&Q($dp.dd)!="none"&&$dp.dd.style.left!="-1970px")){$dp.el["My97Mark"]=false;return}K(J);if(F&&$dp.el.nodeType==1&&$dp.el["My97Mark"]===undefined){$dp.el["My97Mark"]=false;var _,A;if(F.type=="focus"){_="onclick";A="onfocus"}else{_="onfocus";A="onclick"}E($dp.el,_,$dp.el[A])}}function G(){if(T&&V!=X&&V[O].readyState!="complete")return false;return true}function D(){if(I){func=D.caller;while(func!=null){var $=func.arguments[0];if($&&($+"").indexOf("Event")>=0)return $;func=func.caller}return null}return event}}function S(_,$){return _.currentStyle?_.currentStyle[$]:document.defaultView.getComputedStyle(_,false)[$]}function Q(_,$){if(_)if($!=null)_.style.display=$;else return S(_,"display")}function K(H,$){for(var D in _)if(D.substring(0,1)!="$")$dp[D]=_[D];for(D in H)if($dp[D]!==undefined)$dp[D]=H[D];var E=$dp.el?$dp.el.nodeName:"INPUT";if($||$dp.eCont||new RegExp(/input|textarea|div|span|p|a/ig).test(E))$dp.elProp=E=="INPUT"?"value":"innerHTML";else return;if($dp.lang=="auto")$dp.lang=T?navigator.browserLanguage.toLowerCase():navigator.language.toLowerCase();if(!$dp.dd||$dp.eCont||($dp.lang&&$dp.realLang&&$dp.realLang.name!=$dp.lang&&$dp.getLangIndex&&$dp.getLangIndex($dp.lang)>=0)){if($dp.dd&&!$dp.eCont)V[O].body.removeChild($dp.dd);if(_.$dpPath=="")F(A);var B="<iframe style=\"width:1px;height:1px\" src=\""+_.$dpPath+"My97DatePicker.htm\" frameborder=\"0\" border=\"0\" scrolling=\"no\"></iframe>";if($dp.eCont){$dp.eCont.innerHTML=B;Z($dp.eCont.childNodes[0],Y)}else{$dp.dd=V[O].createElement("DIV");$dp.dd.id="_my97DP";$dp.dd.style.cssText="position:absolute";$dp.dd.innerHTML=B;V[O].body.appendChild($dp.dd);Z($dp.dd.childNodes[0],Y);if($)$dp.dd.style.left=$dp.dd.style.top="-1970px";else{$dp.show();C()}}}else if($dp.cal){$dp.show();$dp.cal.init();if(!$dp.eCont)C()}function C(){var F=$dp.position.left,B=$dp.position.top,C=$dp.el;if(C!=$dp.srcEl&&(Q(C)=="none"||C.type=="hidden"))C=$dp.srcEl;var H=W(C),$=G(X),D=N(V),A=a(V),E=$dp.dd.offsetHeight,_=$dp.dd.offsetWidth;if(isNaN(B)){if(B=="above"||(B!="under"&&(($.topM+H.bottom+E>D.height)&&($.topM+H.top-E>0))))B=A.top+$.topM+H.top-E-2;else B=A.top+$.topM+Math.min(H.bottom,D.height-E)+2}else B+=A.top+$.topM;if(isNaN(F))F=A.left+Math.min($.leftM+H.left,D.width-_-5)-(T?2:0);else F+=A.left+$.leftM;$dp.dd.style.top=B+"px";$dp.dd.style.left=F+"px"}}})()
crdsFunctions ----
package ctd.pub.util;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.List;
/**
* CRDS系统函数库,用于配置crdsFunctions.tld文件,便于页面采用EL表达式调用
* @version : 1.0
* @author : houtingsong(MaCi Hotesion)
* @date : Jun 9, 2009 12:08:20 PM
* @email : houtingsong163@163.com
*/
public class CRDSFunctions {
/** 财务比率预警颜色 */
private static final String finRatioAlarmColor = "red";
/**
* 格式化一个字符串数字,当参数divNumber和mulNumber同时输入时,divNumber计算优先,忽略mulNumber的计算,即参数divNumber和mulNumber只能传一个或都不传.
* @param number 将要被格式化的字符串数字,如果为null或"",则为0;
* @param divNumber 除数字符串数字, 如果不为空,则将number除以divNumber运算之后再进行格式化
* @param mulNumber 乘数字符串数字, 如果不为空,则将number乘以mulNumber运算之后再进行格式化
* @param pointSize 要保留的小数点位数
* @param isSeparated 整数部分是否进行逗号分割,1[分割],0[不分割],如1,234,882.001;
* @param isFilledZero 当小数点实际位数不足pointSize时,是否在后面补0,1[补0],0[不补0];
* @param nezProcess 整数number为0、""、null时的处理,0[""、null时返回"",0时返回0],1[""、null时返回0,0时返回""],2[0、null、""视为""]、3[0、null、""视为"0"];
* @param divZeroProcess 当除数为0时的处理,N-(不做乘积计算,但继续做格式化操作),Y-(继续做乘积计算,然后做格式化操作),其它值-(返回这个值);当且仅当参数divNumber="0"时,此参数有效
* ex:<br>
* numberFormat("0","","",8,0,0,3,0) return 0;//数字部分为空或0则当作0来处理,必须有8位小数点,不足8位则不追加0<br>
* numberFormat("","","",8,1,0,3,0) return 0.00000000;//数字部分为空或0则当作0来处理,必须有8位小数点,不足8位则追加0<br>
* numberFormat("0","","",8,0,0,2,0) return 0;//数字部分无论是0或空则返回""<br>
* numberFormat("","","",8,0,0,2,0) return 0;//数字部分无论是0或空则返回""<br>
* numberFormat("0","","",8,0,0,1,0) return 0;//数字部分为0则返回""<br>
* numberFormat("","","",8,0,1,0,0) return 0;//数字部分为空则当作""<br>
* numberFormat("4123.012","","",8,0,1,2,0) return 4123.01200000;//必须有8位小数点,不足8位则追加0<br>
* numberFormat("4123.012","","",8,0,0,2,0) return 4123.012;//8位小数点,不足8位则不追加0<br>
* numberFormat("4123.012","","",8,1,1,2,0) return 4,123.01200000;//整数部分以逗号分割,8位小数点,不足8位则追加0<br>
* numberFormat("4123.012","","",8,1,0,2,0) return 4,123.012;//整数部分以逗号分割,8位小数点,不足8位则不追加0<br>
* numberFormat("4123.012","100","",8,1,0,2,0) return 41.23012;//除以100,整数部分以逗号分割,8位小数点,不足8位则不追加0<br>
* numberFormat("4123.012","100","",8,1,1,2,0) return 41.23012000;//除以100,整数部分以逗号分割,8位小数点,不足8位则追加0<br>
* numberFormat("4123.012","","100",8,1,0,2,0) return 412301.2;//乘以100,整数部分以逗号分割,8位小数点,不足8位则不追加0<br>
* numberFormat("4123.012","","100",8,1,1,2,0) return 412301.20000000;//乘以100,整数部分以逗号分割,8位小数点,不足8位则追加0<br>
*/
public static String numberFormat(String number,String divNumber,String mulNumber,int pointSize,int isSeparated,int isFilledZero,int nezProcess,String divZeroProcess){
String format = isSeparated==1 ? ",###" : "###";//5667
number = CommonMethod.isNull(number) ? "":number.trim();
if((number.length() > 0 && new BigDecimal(number).doubleValue()==0 && nezProcess==1) || (number.equals("") && nezProcess==0) || ((number.equals("")||(number.length() > 0 && new BigDecimal(number).doubleValue()==0))&& nezProcess==2))
return "";
else if(number.equals(""))
number = "0";
if(Double.parseDouble(number)==0.5)
number = "0.50000000001";//0.5时,四舍五入不精确,特处理,如:0.5四舍五入后为1,但处理结果为0。
BigDecimal big = new BigDecimal(number);
if(-1 < big.doubleValue() && big.doubleValue() < 1)
format += "0";
String pointText = extendStr(pointSize,isFilledZero==1 ? "0":"#");
format += pointText.length()>0 ? ("."+pointText) : "";
//被乘除数处理
divNumber = divNumber == null?"" : divNumber.trim();
mulNumber = mulNumber == null?"" : mulNumber.trim();
if(!"".equals(mulNumber)){
if(!"".equals(divNumber)){
if(Double.parseDouble(divNumber)==0){//除数未0时的处理
if("Y".equals(divZeroProcess))//除数为0时是否继续作乘积计算
big = big.multiply(new BigDecimal(mulNumber));
else if(!"N".equals(divZeroProcess))
return divZeroProcess;
} else {//除数不为0则同时做乘除计算
big = big.multiply(new BigDecimal(mulNumber));
big = big.divide(new BigDecimal(divNumber),20,BigDecimal.ROUND_HALF_UP);
}
} else {//未传入除数则只做乘积计算
big = big.multiply(new BigDecimal(mulNumber));
}
} else if(!"".equals(divNumber)){
if(Double.parseDouble(divNumber)!=0)
big = big.divide(new BigDecimal(divNumber),20,BigDecimal.ROUND_HALF_UP);
else if(!"Y".equals(divZeroProcess) && !"N".equals(divZeroProcess))
return divZeroProcess;
}
return new DecimalFormat(format).format(big);
}
/**
* 格式化一个字符串数字,当参数divNumber和mulNumber同时输入时,divNumber计算优先,忽略mulNumber的计算,即参数divNumber和mulNumber只能传一个或都不传.
* @param number 将要被格式化的字符串数字,如果为null或"",则为0;
* @param pointSize 要保留的小数点位数
* @param isSeparated 整数部分是否进行逗号分割,1[分割],0[不分割],如1,234,882.001;
* @param isFilledZero 当小数点实际位数不足pointSize时,是否在后面填补0,1[补0],0[不补0];
* @param intZeroProcess 整数number为0、""、null时的处理,0[""、null时返回""],1[0变为"",返回""],2[0、null、""视为""]、3[0、null、""视为"0"];
* ex:<br>
* decimalFormat("-0",8,0,1,2) return 0.00000000;//必须有8位小数点,不足8位则追加0<br>
* decimalFormat("-0",8,0,0,2) return 0;//必须有8位小数点,不足8位则不追加0<br>
* decimalFormat("-0",8,0,0,1) return "";//必须有8位小数点,不足8位则不追加0<br>
* decimalFormat("",8,0,0,0) return "";//必须有8位小数点,不足8位则不追加0<br>
* decimalFormat("4123.012",8,0,1,1) return 4123.01200000;//必须有8位小数点,不足8位则追加0<br>
* decimalFormat("4123.012",8,0,0,1) return 4123.012;//8位小数点,不足8位则不追加0<br>
* decimalFormat("4123.012",8,1,1,1) return 4,123.01200000;//整数部分以逗号分割,8位小数点,不足8位则追加0<br>
* decimalFormat("4123.012",8,1,0,1) return 4,123.012;//整数部分以逗号分割,8位小数点,不足8位则不追加0<br>
*/
public static String decimalFormat(String number,int pointSize,int isSeparated,int isFilledZero,int intZeroProcess){
return numberFormat(number,null,null,pointSize,isSeparated,isFilledZero,intZeroProcess,"");
}
public static String numericFormat(String numValue,int scale,boolean isSeparated){
if(null == numValue || (numValue=numValue.trim()).length()==0)
return "0";
BigDecimal big = new BigDecimal(numValue);
String format = isSeparated ?",###":"###";
if(-1 < big.doubleValue() && big.doubleValue() < 1)
format += "0";
String point = extendStr(scale,"#");
format += point.length()==0 ? "" : ("."+point);
return new java.text.DecimalFormat(format).format(big);
}
/**
* 将一个字符串扩展为number个字符串,然后返回扩展之后的字符串.如果beExtendStr为null则返回null;
* @param number 要扩展的数目
* @param beExtendStr 将要被扩展的字符串
* @author MaCi Hotesion<br>
* ex:<br>
* extendStr(5,null); //throws NullPointerException<br>
* extendStr(5,"") return ""; <br>
* extendStr(5,"#") return "#####";<br>
* extendStr(3,"234") return "234234234";<br>
*/
public static String extendStr(int number,String beExtendStr){
if(number <= 0 || null == beExtendStr || beExtendStr.length()==0)
return "";
StringBuffer extendSB = new StringBuffer();
for (int i = 0; i < number; i++)
extendSB.append(beExtendStr);
return extendSB.toString();
}
public static String NEVL(String value,String nullValue){
return NEVL2(value,nullValue,value);
}
public static String NEVL2(String value,String nullValue,String notNullValue){
return value==null || value.length()==0 ? nullValue:notNullValue;
}
public static void main(String[] args) {
//System.out.println(new BigDecimal("-0.00").doubleValue()==0);
System.out.println(numberFormat("1","3","",20,1,0,0,"Y"));
// System.out.println(decimalFormat("0",2,1,1,0));
}
public static String numericFormat222(String numValue,int scale,boolean isSeparated){
if(null == numValue || (numValue=numValue.trim()).length()==0)
return null;
BigDecimal big = new BigDecimal(numValue);
String format = isSeparated ?",###":"###";
if(-1 < big.doubleValue() && big.doubleValue() < 1)
format += "0";
String point = extendStr(scale,"#");
format += point.length()==0 ? "" : ("."+point);
return new java.text.DecimalFormat(format).format(big);
}
}