如何分配相同的控制器方法来处理两个不同视图上的两个表单?

时间:2018-04-09 02:54:06

标签: spring-mvc thymeleaf

我有两种表单可以在两个不同的视图中联系。 一个在Home视图中,另一个在Contact-us视图中。

我想对两种表单使用相同的控制器方法。

因此,当我在主页并从此视图提交表单时,它必须保留在主页中,当我在Contact-us页面时,我提交表单它保留在页面中 接触我们。

我的问题是使用return方法。如何解决它不重定向到另一个视图,如果可能的话我不想使用两种方法。

@Controller
public class SendingController {
    @Autowired
    private EmailServiceImpl emailServiceImpl;

    @Autowired
    private MailValidator mailValidator;

    /* Send HTML mail (simple) */
    @RequestMapping(value = "/sendMailSimple", method = RequestMethod.POST)
    public String sendSimpleMail(@Valid @ModelAttribute("mailForm") final Mail mailForm, BindingResult bindingResult)
            throws MessagingException {
        mailValidator.validate(mailForm, bindingResult);

        if (bindingResult.hasErrors()) {
            return "contact-us";
        }

        mailForm.setRecipientEmail("contact-test@gmail.com");
        this.emailServiceImpl.sendSimpleMail(mailForm);
        return "contact-us";

    }

}

接触us.html

<form action="#" th:action="@{/sendMailSimple}"
                            th:object="${mailForm}" role="form" id="contact-form"
                            method="post">
...
</form>

home.html的

<form id="contact-form" method="post"
                                 action="#" th:action="@{/sendMailSimple}"
                                 th:object="${mailForm}" role="form">
...
</form>

1 个答案:

答案 0 :(得分:2)

我认为你已经添加了一个参数来区分这两个视图,假设参数被称为 viewType ,那么你可以按照以下步骤进行:

接触us.html

<form action="#" th:action="@{/sendMailSimple}"
                            th:object="${mailForm}" role="form" id="contact-form"
                            method="post">
<input type="hidden" name="viewType" value="contact-us"/>
...
</form>

home.html的

<form id="contact-form" method="post"
                                 action="#" th:action="@{/sendMailSimple}"
                                 th:object="${mailForm}" role="form">
     <input type="hidden" name="viewType" value="home"/>
    ...
</form>

因此在控制器中我们可以获得 viewType 参数:

@RequestMapping(value = "/sendMailSimple", method = RequestMethod.POST)
public String sendSimpleMail(@Valid @ModelAttribute("mailForm") final Mail mailForm, String viewType,BindingResult bindingResult)
        throws MessagingException {
    mailValidator.validate(mailForm, bindingResult);

    if (bindingResult.hasErrors()) {
        return "contact-us";
    }

    mailForm.setRecipientEmail("contact-test@gmail.com");
    this.emailServiceImpl.sendSimpleMail(mailForm);

    if(viewType.equals("contact-us")){
     return "contact-us"
    }else{
      return "home";
    }
    //return viewType;can also return the viewType directly

}