我正在创建Web应用程序,客户可以在其中购物并在购物车中添加产品。当我尝试确认订单时,出现“ Whitelabel错误页面”。我写结帐流程。当我单击付款按钮时,它将显示确认订单并显示购物车详细信息。但是,当我单击“付款”按钮时,它显示了Whitelabel错误页面。请告诉我为什么我会收到此错误。
checkout-flow.xml
<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/webflow
http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">
<var name="shipping" class="net.kzn.shoppingbackend.dto.Address"/>
<on-start>
<evaluate expression="checkoutHandler.init(currentUser.name)" result="flowScope.checkoutModel"/>
</on-start>
<!-- view the address selection page-->
<view-state id="shipping" view="order-address.jsp" model="shipping">
<on-entry>
<evaluate expression="checkoutHandler.getShippingAddresses(flowScope.checkoutModel)" result="viewScope.addresses"/>
</on-entry>
<transition on="addressSelection" to="saveAddressSelection" validate="false"/>
<transition on="saveAddress" to="saveAddress" />
</view-state>
<!-- action state to save the address -->
<action-state id="saveAddressSelection">
<evaluate expression="checkoutHandler.saveAddressSelection(flowScope.checkoutModel, requestParameters.shippingId)" />
<transition on="success" to="payment" />
</action-state>
<!-- action state to save the address -->
<action-state id="saveAddress">
<evaluate expression="checkoutHandler.saveAddress(flowScope.checkoutModel, shipping)" />
<transition on="success" to="payment" />
</action-state>
<!-- view the payment mode page-->
<view-state id="payment" view="order-payment.jsp" model="flowScope.checkoutModel">
<transition on="pay" to="saveOrder" />
</view-state>
<!-- action state to save the address -->
<action-state id="saveOrder">
<evaluate expression="checkoutHandler.saveOrder(flowScope.checkoutModel)" />
<transition on="success" to="receipt"/>
</action-state>
<!-- end state -->
<end-state id="receipt" view="order-confirm.jsp">
<on-entry>
<evaluate expression="checkoutHandler.getOrderDetail(flowScope.checkoutModel)" result="requestScope.orderDetail"/>
</on-entry>
</end-state>
<end-state id="home" view="externalRedirect:contextRelative:/home" />
<end-state id="error" view="flows/flows-shared/error" />
<!-- global transition -->
<global-transitions>
<transition on="home" to="home" validate="false" />
<transition on-exception="java.lang.Exception" to="error" />
</global-transitions>
</flow>
order-payment.jsp
<%@include file="../../flows-shared/header.jsp" %>
<div class="container mt-5">
<div class="row">
<!-- To display all the goods -->
<div class="col-md-6">
<div class="row">
<c:forEach items="${checkoutModel.cartLines}" var="cartLine">
<div class="col-12">
<div>
<h3>${cartLine.product.name}</h3>
<hr/>
<h4>Quantity -${cartLine.productCount}</h4>
<h5>Buying Price - ₹ ${cartLine.buyingPrice}/-</h5>
</div>
<hr/>
<div class="text-right">
<h3>Grand Total - ₹ ${cartLine.total}/-</h3>
</div>
</div>
</c:forEach>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h3 class="card-title">
Payment Details
</h3>
</div>
<div class="card-body">
<form role="form">
<div class="form-group">
<label for="cardNumber">
CARD NUMBER</label>
<div class="input-group">
<input type="text" class="form-control" id="cardNumber" placeholder="Valid Card Number"
required autofocus />
<span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
</div>
</div>
<div class="row">
</div>
</form>
</div>
</div>
<ul class="nav nav-pills nav-stacked">
<li class="active"><a href="#"><span class="badge pull-right"> ₹ ${checkoutModel.checkoutTotal}/-</span> Final Payment</a></li>
</ul>
<br/>
<a href="${flowExecutionUrl}&_eventId_pay" class="btn btn-success btn-lg btn-block" role="button">Pay</a>
</div>
</div>
</div>
checkouthandler.java
package net.kzn.onlineshopping.handler;
@Component
public class CheckoutHandler {
private static final Logger logger = LoggerFactory
.getLogger(CheckoutHandler.class);
@Autowired
private UserDAO userDAO;
@Autowired
private ProductDAO productDAO;
@Autowired
private CartLineDAO cartLineDAO;
@Autowired
private HttpSession session;
public CheckoutModel init(String name) throws Exception {
User user = userDAO.getByEmail(name);
CheckoutModel checkoutModel = null;
if (user != null) {
checkoutModel = new CheckoutModel();
checkoutModel.setUser(user);
checkoutModel.setCart(user.getCart());
double checkoutTotal = 0.0;
List<CartLine> cartLines = cartLineDAO.listAvailable(user.getCart()
.getId());
if (cartLines.size() == 0) {
throw new Exception(
"There are no products available for checkout now!");
}
for (CartLine cartLine : cartLines) {
checkoutTotal += cartLine.getTotal();
}
checkoutModel.setCartLines(cartLines);
checkoutModel.setCheckoutTotal(checkoutTotal);
}
return checkoutModel;
}
public String saveOrder(CheckoutModel checkoutModel) {
String transitionValue = "success";
// create a new order object
OrderDetail orderDetail = new OrderDetail();
// attach the user
orderDetail.setUser(checkoutModel.getUser());
// attach the shipping address
orderDetail.setShipping(checkoutModel.getShipping());
// fetch the billing address
Address billing = userDAO.getBillingAddress(checkoutModel.getUser()
.getId());
orderDetail.setBilling(billing);
List<CartLine> cartLines = checkoutModel.getCartLines();
OrderItem orderItem = null;
double orderTotal = 0.0;
int orderCount = 0;
Product product = null;
for (CartLine cartLine : cartLines) {
orderItem = new OrderItem();
orderItem.setBuyingPrice(cartLine.getBuyingPrice());
orderItem.setProduct(cartLine.getProduct());
orderItem.setProductCount(cartLine.getProductCount());
orderItem.setTotal(cartLine.getTotal());
orderItem.setOrderDetail(orderDetail);
orderDetail.getOrderItems().add(orderItem);
orderTotal += orderItem.getTotal();
orderCount++;
// update the product
// reduce the quantity of product
product = cartLine.getProduct();
product.setQuantity(product.getQuantity()
- cartLine.getProductCount());
product.setPurchases(product.getPurchases()
+ cartLine.getProductCount());
productDAO.update(product);
// delete the cartLine
cartLineDAO.remove(cartLine);
}
orderDetail.setOrderTotal(orderTotal);
orderDetail.setOrderCount(orderCount);
orderDetail.setOrderDate(new Date());
// save the order
cartLineDAO.addOrderDetail(orderDetail);
// set it to the orderDetails of checkoutModel
checkoutModel.setOrderDetail(orderDetail);
// update the cart
Cart cart = checkoutModel.getCart();
cart.setGrandTotal(cart.getGrandTotal() - orderTotal);
cart.setCartLines(cart.getCartLines() - orderCount);
cartLineDAO.updateCart(cart);
// update the cart if its in the session
UserModel userModel = (UserModel) session.getAttribute("userModel");
if (userModel != null) {
userModel.setCart(cart);
}
return transitionValue;
}
public OrderDetail getOrderDetail(CheckoutModel checkoutModel) {
return checkoutModel.getOrderDetail();
}
}
CartController.java
package net.kzn.onlineshopping.controller;
@Controller
@RequestMapping("/cart")
public class CartController {
private final static Logger logger = LoggerFactory.getLogger(CartController.class);
@Autowired
private CartService cartService;
@RequestMapping("/show")
public ModelAndView showCart(@RequestParam(name = "result", required = false) String result) {
ModelAndView mv = new ModelAndView("page");
mv.addObject("title", "Shopping Cart");
mv.addObject("userClickShowCart", true);
if (result != null) {
switch (result) {
case "added":
mv.addObject("message", "Product has been successfully added inside cart!");
cartService.validateCartLine();
break;
case "unavailable":
mv.addObject("message", "Product quantity is not available!");
break;
case "updated":
mv.addObject("message", "Cart has been updated successfully!");
cartService.validateCartLine();
break;
case "modified":
mv.addObject("message", "One or more items inside cart has been modified!");
break;
case "maximum":
mv.addObject("message", "Maximum limit for the item has been reached!");
break;
case "deleted":
mv.addObject("message", "CartLine has been successfully removed!");
break;
}
} else {
String response = cartService.validateCartLine();
if (response.equals("result=modified")) {
mv.addObject("message", "One or more items inside cart has been modified!");
}
}
mv.addObject("cartLines", cartService.getCartLines());
return mv;
}
@RequestMapping("/{cartLineId}/update")
public String udpateCartLine(@PathVariable int cartLineId, @RequestParam int count) {
String response = cartService.manageCartLine(cartLineId, count);
return "redirect:/cart/show?" + response;
}
@RequestMapping("/add/{productId}/product")
public String addCartLine(@PathVariable int productId) {
String response = cartService.addCartLine(productId);
return "redirect:/cart/show?" + response;
}
@RequestMapping("/{cartLineId}/remove")
public String removeCartLine(@PathVariable int cartLineId) {
String response = cartService.removeCartLine(cartLineId);
return "redirect:/cart/show?" + response;
}
/*
* after validating it redirect to checkout if result received is success
* proceed to checkout else display the message to the user about the changes in
* cart page
*/
@RequestMapping("/validate")
public String validateCart() {
String response = cartService.validateCartLine();
if (!response.equals("result=success")) {
return "redirect:/cart/show?" + response;
} else {
return "redirect:/cart/checkout";
}
}
}
错误
[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/onlineshopping] threw exception [Handler dispatch failed; nested exception is java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError: null
at org.springframework.util.CollectionUtils.isEmpty(CollectionUtils.java:54) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.util.StringUtils.collectionToDelimitedString(StringUtils.java:1249) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
日志文件
在Checkout-flow和checkouthandler中是否需要进行任何更改。请告诉我我在做什么错了。
答案 0 :(得分:0)
return "redirect:/cart/checkout";
根据我所见,这没有请求映射。添加类似
@RequestMapping("/checkout")
public String checkout() {
...
}
我在看线
2018-12-01 20:16:30.926 INFO 11108 --- [nio-8080-exec-5] o.s.w.c.s.GenericWebApplicationContext : Refreshing Flow ApplicationContext [cart/checkout]: startup date [Sat Dec 01 20:16:30 IST 2018]; parent: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@519e7762