- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在创建网络应用程序,客户可以在其中购物并将产品添加到购物车中。当我尝试确认订单时,我收到“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 中是否有任何需要更改的地方。请告诉我我在这里做错了什么。
最佳答案
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
关于java - spring boot “Whitelabel Error Page” 无可用消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53571811/
有人可以解释一下 spring-boot-parent 和 spring-boot-starter-parent 之间的区别吗,正如我在下面附加的 GIT HUB 代码链接之一中看到的,他们为 spr
我有与 jersey 框架集成的 Spring Boot 应用程序。 现在,当我尝试运行该应用程序时,它只是停留在 Spring 启动徽标上,之后没有任何 react 。 我也尝试添加 -X ,但徽标
我指的是 Spring Boot 关于 的文档自动配置 和 执行器 模块: 自动配置: Spring Boot AutoConfiguration attempts to automatically
我正在尝试将 apache log4j 集成到我的 Spring boot 应用程序中。这是我的 build.gradle 文件: build.gradle buildscript { rep
使用 Spring Boot Maven 插件的以下命令在生产中启动 Spring Boot 应用程序是否是一个好主意或实践? mvn spring-boot:run 最佳答案 不,这是个坏主意。 您
据我所知,spring boot 和 spring session 为我们提供了一站式自动配置,但是当我的应用程序使用 session redis 和应用程序缓存 redis 时,不是同一个 redi
我希望使用Spring Boot创建一个新的Web应用程序。不幸的是,我的服务器在技术堆栈方面相当有限。它安装了Java 5。 谁能告诉我spring boot是否可以在Java 1.5上运行以及什么
我有3个实体 CarWash(设置Wash) Wash(car_wash_id FK到CarWash) WashComment(wash_id FK到Wash) 有什么办法可以写这个查询 @Qu
我一直在关注this文章。 我正在尝试在Spring-boot应用程序中优雅地处理gRPC错误,的主要目标是能够在gRPC客户端中获取错误状态。 在上面的文章之后,我坚持为异常添加拦截器。如何在Spr
我有一个要使用的自定义log4j布局插件。在IntelliJ中运行或与./gradlew bootRun一起运行时,插件可以正常工作。不使用./gradlew bootJar构建启动jar。 启用-D
我想在给定范围 (5001-5100) 的随机端口上启动 Spring Cloud 应用程序(Spring Boot 1.5.14,Spring Cloud Edgware.SR4)。我知道我们可以使
任何人都可以向我展示或指出不使用 spring boot gradle 插件的 spring boot gradle 项目。 我正在寻找类似不使用 gradle 插件的 spring boot sta
我当时尝试包含上述依赖项之一,但找不到任何区别: spring boot starter web:我可以看到 Flux 和 Mono 类并制作一个响应式(Reactive)休息 Controller
我们一直在为我们的应用程序使用 Springboot 1.X。 现在准备开始一些新的应用程序,想知道我们是应该使用 SpringBoot2.0 还是坚持使用 SpringBoot 1.X? 对一种方式
我希望记录应用程序正在加载 application-profile.propeties 或 application.yml。怎么做。在哪种方法中,我可以听取它并检测它是成功加载还是失败。 最佳答案 您
当我在 pom.xml 中添加简单的 spring-boot-starter-data-jpa 依赖项时,在 pom.xml 文件中出现错误。如果我删除该依赖项,则不会再有错误。我不确定为什么会发生这
我希望记录应用程序正在加载 application-profile.propeties 或 application.yml。怎么做。在哪种方法中,我可以听取它并检测它是成功加载还是失败。 最佳答案 您
我在网上看了很多关于 spring-boot-devtools 的文章和问题,但仍然无法弄清楚为什么它对我不起作用。每次运行我的应用程序时,我都会得到以下信息: 17:54:28.057 [main]
我正在尝试将现有的 Spring 应用程序移植到 Spring Boot。我不使用 spring-boot-starter-data-solr 启动器,但是我的类路径上有 apache solrj (
(这主要是一个历史问题。Pivotal 建议所有论坛讨论都在 StackOverflow 上进行,这就是我在这里问它的原因。) Spring Boot 项目用来证明将应用程序的类和依赖项从可执行 ja
我是一名优秀的程序员,十分优秀!