2015-08-29 19 views
0

我嘗試基於用戶輸入在結帳頁上應用折扣。用戶進入他的賬戶並按下按鈕,他可以對他目前的購買申請折扣。提交時,他將被重定向到應用折扣的結帳頁面。這只是一種將信息發送到另一個表單的表單。JSTL <c:choose>無法識別表單輸入整數

我有幾個外部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

設置變量你'C使用前:choose',所以把線'「/>'在'c:choose'中使用var之前 –

回答

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>