JSTL <c:choose>无法识别表单输入整数

时间:2015-08-29 02:18:42

标签: javascript forms jsp jstl servlet-3.0

我尝试根据用户输入在结帐页面上应用折扣。用户进入他的帐户并按下按钮,他可以对他当前的购买应用折扣。在提交时,他被重定向到应用折扣的结账页面。它只是一种将信息发送到另一种形式的表单。

我有几个处理折扣功能的外部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();
};

1 个答案:

答案 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>