【发布时间】:2015-08-29 02:18:42
【问题描述】:
我尝试根据用户输入在结帐页面上应用折扣。用户进入他的帐户并按下一个按钮,他可以对他当前的购买应用折扣。在提交时,他将被重定向到应用折扣的结帐页面。它只是一个将信息发送到另一个表单的表单。
我有几个处理折扣功能的外部 javascript 文件。我只根据c:choose 的条件调用我需要的脚本。问题是,jstl 无法识别整数并将任何被请求的input 视为null 值。无论value 中的value 是什么,它始终是第一个脚本,即正在执行的noDiscount.js输入。
这个错误可能是由于数据类型不兼容造成的吗?当我向它发送一个字符串时,该脚本正在寻找一个整数......如何解决这个问题?
userAccount.jsp
<form method='POST' name='DiscountForm' action='applyDiscount'>
<input class="discount" readonly name="discount" type="text" value="<%= resultset.getString("discount")%>"/>
<input type='submit' style="border:none; padding:1%; background:black; color:white; cursor:pointer;" value='Apply Discount'>
</form>
checkout.jsp
<head>
<c:choose>
<c:when test="${discountValue == null}"><script type="text/javascript" src="js/noDiscount.js"></script></c:when>
<c:when test="${discountValue == 10}"><script type="text/javascript" src="js/discount(10).js"></script></c:when>
</c:choose>
</head>
<body>
<c:set var="discountValue" value="<%= request.getParameter("discount")%>"/>
<input class="discount" style="background:#eaeaea;" readonly id="userDiscount" name="applied_discount" type="text" value="${discountValue}"/>
</body>
noDiscount.js (未输入折扣时的常规销售税计算器):
function applyTax(){
var cartSubTotal = parseFloat(document.getElementById( 'cartSubtotal' ).innerHTML);
console.log(cartSubTotal);
var salesTaxGst = (cartSubTotal / 100) * 5;
var salesTaxPst = (cartSubTotal / 100) * 9.975;
var totalAmount = (cartSubTotal*1) + (salesTaxGst * 1) +(salesTaxPst * 1) ;
document.getElementById( 'cartSubtotal' ).innerHTML = cartSubTotal.toFixed(2);
document.getElementById( 'taxGst' ).innerHTML = salesTaxGst.toFixed(2);
document.getElementById( 'taxPst' ).innerHTML = salesTaxPst.toFixed(2);
var elements = document.getElementsByClassName( 'cartTotal' );
for(var i = 0; i < elements.length; i++) {
elements[i].value = totalAmount.toFixed(2);
}
}
window.onload = function() {
applyTax();
};
折扣(10).js (申请 10% 折扣)
function applyTax(){
var userDiscount = parseFloat(document.getElementById( 'userDiscount' ).innerHTML);
var cartSubTotal = parseFloat(document.getElementById( 'cartSubtotal' ).innerHTML);
console.log(userDiscount);
console.log(cartSubTotal);
var newDiscount = (cartSubTotal / 100) * 10;
var salesTaxGst = (cartSubTotal / 100) * 5;
var salesTaxPst = (cartSubTotal / 100) * 9.975;
var totalAmount = (cartSubTotal*1) - (newDiscount*1) + (salesTaxGst * 1) +(salesTaxPst * 1) ;
document.getElementById('userDiscount').innerHTML = newDiscount.toFixed(2);
document.getElementById( 'cartSubtotal' ).innerHTML = cartSubTotal.toFixed(2);
document.getElementById( 'taxGst' ).innerHTML = salesTaxGst.toFixed(2);
document.getElementById( 'taxPst' ).innerHTML = salesTaxPst.toFixed(2);
var elements = document.getElementsByClassName( 'cartTotal' );
for(var i = 0; i < elements.length; i++) {
elements[i].value = totalAmount.toFixed(2);
}
}
window.onload = function() {
applyTax();
};
【问题讨论】:
-
在
c:choose中使用变量之前先设置变量,所以在c:choose中使用var之前先放行<c:set var="discountValue" value="<%= request.getParameter("discount")%>"/>
标签: javascript forms jsp jstl servlet-3.0