自定义EL表达式解析一个整数字段各BIT位为1时对应的汉字字符串
- 首先建一个java类ElFuncUtil,类中有静态方法,其功能为根据整数的值返回事先定义好的汉字告警信息字符串。
/**
* EL方法判断一个整数的某位是否为1或0
* @param str1
* @param str2
* @return
*/
public static String appendWarn(String str1, String str2) {
List<String> listWarn = new ArrayList<String>();
listWarn.add("告警1 ");
listWarn.add("告警2 ");
listWarn.add("告警3 ");
listWarn.add("告警4 ");
listWarn.add("告警5 ");
listWarn.add("告警6 ");
listWarn.add("告警7 ");
listWarn.add("告警8 ");
listWarn.add("告警9 ");
listWarn.add("告警10 ");
listWarn.add("告警11 ");
listWarn.add("告警12 ");
listWarn.add("告警13 ");
listWarn.add("告警14 ");
listWarn.add("告警15 ");
listWarn.add("告警16 ");
listWarn.add("告警17 ");
listWarn.add("告警18 ");
listWarn.add("告警19 ");
listWarn.add("告警20 ");
listWarn.add("告警21 ");
listWarn.add("告警22 ");
listWarn.add("告警23 ");
listWarn.add("告警24 ");
listWarn.add("告警25 ");
listWarn.add("告警26 ");
listWarn.add("告警27 ");
listWarn.add("告警28 ");
listWarn.add("告警29 ");
listWarn.add("告警30 ");
listWarn.add("告警31 ");
listWarn.add("告警32 ");
String result = "";
//整数
int number = Integer.valueOf(str1).intValue();
if (number <= 0)return result; //如果数字小于0
//指定某一位
int nbit = Integer.valueOf(str2).intValue()-1;
String binaryString = Integer.toBinaryString(number);
int nLen = binaryString.getBytes().length -1;
if (nbit > nLen) { return result;}
//20转换后应该得到“0001 0100” 前面三个0没有,实际是“1 0100”,取的时候应该从最高为开始
char ch = binaryString.charAt(nLen-nbit);
if (ch =='1')
{
result = listWarn.get(nbit);
}
return result;
}
2、接着写个tld文件elfunc.tld。
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee [url]http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd[/url]"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>elf</short-name>
<function>
<description>返回某BIT代表的字符串</description>
<name>appendWarn</name>
<function-class>com.XXX.util.ELFuncUtil
</function-class>
<function-signature>java.lang.String appendWarn(java.lang.String,java.lang.String)</function-signature>
<example>${elf:appendWarn(str1, str2)}</example>
</function>
</taglib>
3、直接在jsp中使用我们自定义的el表达式了,在使用前别忘了在jsp中导入tld。
JSP页面显示代码:
<td class='center'>
<c:forEach var="i" begin="1" end="32" step="1">
<c:out value="${elf:appendWarn(var.ALARMDATA,i)}"/>
</c:forEach>
</td>
备注:var.ALARMDATA是传入的32位整数。