JSTL <c:choose> 无法识别表单输入整数
JSTL <c:choose> does not recognize form input integers
我尝试根据用户输入在结账页面上应用折扣。用户进入他的账户并按下一个按钮,他可以对他当前的购买应用折扣。提交后,他将被重定向到应用折扣的结帐页面。它只是一个将信息发送到另一个表单的表单。
我有几个处理折扣功能的外部 javascript 文件。我只根据c:choose
的条件调用我需要的脚本。问题是,jstl 不识别整数并将任何被请求的 input
视为 null
value.It 始终是第一个脚本,正在执行的 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();
};
我找到了解决我的问题的方法,尽管我发现它的效率较低,但它确实有效。我正在使用 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>
我尝试根据用户输入在结账页面上应用折扣。用户进入他的账户并按下一个按钮,他可以对他当前的购买应用折扣。提交后,他将被重定向到应用折扣的结帐页面。它只是一个将信息发送到另一个表单的表单。
我有几个处理折扣功能的外部 javascript 文件。我只根据c:choose
的条件调用我需要的脚本。问题是,jstl 不识别整数并将任何被请求的 input
视为 null
value.It 始终是第一个脚本,正在执行的 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();
};
我找到了解决我的问题的方法,尽管我发现它的效率较低,但它确实有效。我正在使用 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>