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>