java - servlet 转发未通过模型后的 Spring 重定向

标签 java spring jakarta-ee tomcat servlets

我有一个 Portal,它结合了 Spring Controller 和几个常规 servlet。

在屏幕中,用户有一个列表,他/她可以从中选择一张信用卡,以便查看该卡的交易报告。作为一项额外的安全措施,我避免在任何请求中向客户发送信用卡,因此我有一个信用卡号码列表,我将其发送给用户并在用户发送的请求中收到我使用的记录 ID以确定查询的是哪张信用卡。

在 Controller (ReportController) 中,我有一个方法可以处理此输入并调用(本地)负责处理报告的 servlet (ReportServlet)。如果处理过程中有任何错误,它应该使用 model 参数“error”将其返回到屏幕。最后一部分不起作用。

如果 ReportServlet 中有错误,它不会返回到屏幕。如果我评论转发行(并强制出错)它会起作用,但在转发之后它不会。我做错了什么?

代码如下:

报表 Controller

try {
               ...

                if (cardholders == null || cardholders.size() < 2 || id <= 0) {
                    model.put("error","there's an error");
                    return CARDTRANSACTIONS_PATH;
                } else {
...
                    HttpUpdatetableRequestWrapper customRequest = new HttpUpdatetableRequestWrapper(request);
                    customRequest.setParameter("cardnumber", cardholder.getCardnumber());

                    request.getRequestDispatcher(config.getProperty("reportservlet")).forward((HttpServletRequest) customRequest, response);
                    String error = (String) session.getAttribute("error");
                    if(!(error == null || "".equals(error))){
                        throw new RuntimeException(error);                        
                    }
                }
            } catch (Exception ex) {
                model.put("error", "there's an error");
            } finally{ return CARDTRANSACTIONS_PATH;}

最佳答案

当您的 Controller 返回时,Spring 会将模型交给 AbstractView这将分解它并将属性传递给请求。因此,当您向 Controller 中的模型对象添加属性时,您只是将它们添加到与请求无关的映射中。如果您希望这些属性可用于您转发到的资源,您应该将它们直接添加到请求中。

当你转发时,你期待你转发到的资源来处理响应,所以你应该让你的 Controller 在这种情况下返回 null,这样它就不会做任何事情进一步加工。

关于java - servlet 转发未通过模型后的 Spring 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772477/

相关文章:

Spring 3.2 注解 Autowiring 多个构造函数

java - 不再使用 EJB 3.0 的首要原因是什么?

java - 将 Hibernate 集成到 Spring 3 项目中

hibernate - 执行此操作需要事务(使用事务或扩展持久性上下文)

java - ListAsGridBaseAdapter 仅在项目数为偶数时显示网格项目

java - Spring 环境中的多个@ConfigurationProperties validator bean

java - 通过 REST Web 服务发送字节数组并接收字符串

java - spring data neo4j 和 spring 版本,冲突

java - 无参数构造函数和带参数构造函数之间的关系

Java静态分析器自定义模板/规范