有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在SpringMVC中使用重定向在jsp上显示验证消息

我有这样的表格

<form:form method="POST" action="posts/add" modelAttribute="post">
        <table>
            <tr>
                <td><form:label path="author"><spring:message code="blog.posts.author.name"/></form:label></td>
                <td>
                    <form:select path="author">
                        <form:option value="NONE" label="--- Select ---"/>
                        <form:options items="${authors}" />
                    </form:select>
                </td>
                <td><form:errors path="author" cssClass="error" /></td>
            </tr>
            <tr>
                <td><form:label path="text"><spring:message code="blog.posts.text"/></form:label></td>
                <td><form:textarea path="text" rows="5" cols="30"/></td>
                <td><form:errors path="text" cssClass="error" /></td>   
            </tr>
        </table>
        <input type="submit" value="<spring:message code="blog.posts.save"/>" />
    </form:form>

和它的控制器

@Controller
public class PostsController {

    @Autowired
    private PostDAO postDao;

    @Autowired
    private Validator validator;

    @RequestMapping("/posts")
    public String showAllPosts(ModelMap model) {

        List<String> authors = new ArrayList<String>();
        authors.add("John B.");
        authors.add("Jack C.");

        List<Post> posts = postDao.findAll();
        model.addAttribute("posts", posts);
        model.addAttribute("authors", authors);

        return "posts";
    }

    @ModelAttribute("post")
    public Post getPost(ModelMap model) {
        return new Post();
    }

    @RequestMapping(value = "/posts/add", method = RequestMethod.POST)
    public String savePost(@ModelAttribute("post") Post post, BindingResult errors, ModelMap model) {

        validator.validate(post, errors);

        if (errors.hasErrors()) {
            model.addAttribute("posts", postDao.findAll());
            return "posts";
        }

        postDao.addPost(post);
        model.addAttribute("posts", postDao.findAll());

        return "redirect:/posts";
    }

我使用自定义验证器

如果出现以下情况,它将显示带有错误消息的页面:

if (errors.hasErrors()) {
                model.addAttribute("posts", postDao.findAll());
                return "posts";
            }

我试图在返回语句中使用redirect:/posts

但在这种情况下,它不会在页面上显示错误消息

还有?我试图添加到控制器。但是没有成功

@SessionAttributes("post")

是否可以重定向到页面并在其上显示错误消息


共 (1) 个答案

  1. # 1 楼答案

    重定向导致Servlet容器使用302状态代码和Location头响应客户机,该头的值是要转到下一个的URI

    模型和请求属性仅在一个请求的生存期内存在。因此,在Servlet容器发送302之后,它们就消失了。您需要使用flash属性。如果您使用的是Spring3.1+,那么可以使用^{}实现这一点