`
raincoder
  • 浏览: 27590 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类

Ext学习日记——网页计算器示例

 
阅读更多

 

网页计算器是方便用户进行数学计算的一种有力工具。传统的网页计算器通过纯JvaScript在客户端实现,计算逻辑易被用户获取,安全性不高。通过Ajax优化过的网页计算器将主要的计算逻辑放在服务器端进行运算,客户端服装收集用户输入的表达式,提高了程序的安全性非常适合于有安全要求的场合。

 

 

 

/*
 * 网页计算器示例
 */
Ext.onReady(function() {
Ext.onReady(function() {
var calpanel = new Ext.panel.Panel({
title: '计算器',
renderTo: Ext.getBody(),
bodyPadding: 5,
width: 270,
layout: {
type: 'table',
columns: 5  //设置表格布局默认列数
},
frame: true,
tbar: ['公式:',new Ext.form.field.Text({
id: 'expression',
readOnly: true,
style: 'text-align:right'
}),
'=',
new Ext.form.field.Text({
id: 'result',
width: 60
})],
defaultType: 'button',
defaults: {
minWidth: 50,
handler: btnClick
},
items: [{
text: '1',symbol: '1'
}, {
text: '2',symbol: '2'
}, {
text: '3',symbol: '3'
}, {
text: '(',symbol: '('
},{
text: ')',symbol: ')'
}, {
text: '4',symbol: '4'
}, {
text: '5',symbol: '5'
}, {
text: '6',symbol: '6'
}, {
text: '+',symbol: '+'
},{
text: '-',symbol: '-'
}, {
text: '7',symbol: '7'
}, {
text: '8',symbol: '8'
}, {
text: '9',symbol: '9'
}, {
text: '×',symbol: '*'
}, {
text: '÷',symbol: '/'
}, {
text: '0',symbol: '0'
}, {
text: '.',symbol: '.'
}, {
text: '=',symbol: '='
}, {
text: 'c',symbol: 'clear'
}, {
text: '<―',symbol: 'back'
}]
})
 
//取得id为expression的组件引用
var expression = Ext.getCmp('expression');
//取得id为result的组件引用
var result = Ext.getCmp('result');
//按钮单击事件的处理函数
function btnClick(btn) {
var oldValue = expression.getValue();
if(btn.symbol == 'back') {
//取消最后一次输入的字符
oldValue = oldValue.substring(0, oldValue.length - 1);
} else if(btn.symbol == 'clear') {
//清空表达式和结果
oldValue = '';
result.setValue('');
} else if(btn.symbol == '=') {
//计算表达式
calculate();
} else if(btn.symbol == '.') {
alert(oldValue.indexOf('.'))
if(oldValue.indexOf('.') != -1) {
return;
}
oldValue += btn.symbol;
} else {
//累计表达式字符串
oldValue += btn.symbol;
}
expression.setValue(oldValue);
}
 
//计算表达式函数
 function calculate() {
         var str = expression.getValue();
         //判断表达式是否为空
         if(!Ext.isEmpty(str)) {
                 //将表达式发送到服务器进行计算
                 Ext.Ajax.request({
                         url: 'calculateServer.jsp',
                         params: {
                                 Exp: str
                         },
                         callback: function(options, success, response) {
                                 if(success) {
                                         result.setRawValue(response.responseText);
                                 } else {
                                         result.setRawValue('error');
                                 }
                         }
                 })
         }
         
 }
})
})

 

 

 

服务器端代码:

在服务端使用Apachecommons-jexl-1.1.jar解析表达式字符串并进行计算

<%@ page language="java" contentType="text/html;charset=utf-8" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="org.apache.commons.jexl.*" %>
<%
String jexlExp = request.getParameter("Exp");
System.out.println(jexlExp);
Expression e = ExpressionFactory.createExpression(jexlExp);
JexlContext jc = JexlHelper.createContext();
Object result = e.evaluate(jc);
response.getWriter().write(result.toString());
%>

 

 

 

 

 

 

  • 大小: 6.2 KB
  • 大小: 6.5 KB
  • 大小: 6.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics