我尝试根据用户输入在结帐页面上应用折扣。用户进入他的帐户并按下按钮,他可以对他当前的购买应用折扣。在提交时,他被重定向到应用折扣的结账页面。它只是一种将信息发送到另一种形式的表单。
我有几个处理折扣功能的外部JavaScript文件。我只根据c:choose
的条件调用我需要的脚本。问题是,jstl无法识别整数并将所请求的任何input
视为null
值。它始终是第一个脚本,noDiscount.js
正在执行,无论什么是输入中的value
。
这个错误可能是由于数据类型不兼容造成的吗?该脚本正在寻找一个整数,而我正在发送一个字符串...如何解决这个问题?
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();
};
答案 0 :(得分:0)
我找到了解决问题的方法,即使我觉得效率低下也行不通。我正在使用JSTL而不是Javascript来处理算术:
<c:set var="PST" value="${(cart.subtotal / 100) * 5}"/>
<c:set var="GST" value="${(cart.subtotal / 100) * 9.975}"/>
<c:set var="discountValue" value="<%= request.getParameter("discount")%>"/>
<c:choose>
<c:when test="${discountValue == null}">
<c:set var="cartTotal" value="${cart.subtotal + PST + GST}"/>
</c:when>
<c:when test="${discountValue == 10}">
<c:set var="disc10" value="${(cart.subtotal / 100) * 10}"/>
<c:set var="cartTotal" value="${cart.subtotal - disc10 + PST + GST}"/>
</c:when></:choose>