Spring mvc表单发布到不同的控制器,或者过度思考这个

时间:2011-11-09 15:54:56

标签: java spring spring-mvc

我这样做比以前更令人困惑。这是简化版。

1 - 我在右上角的每个页面上都有一个下拉菜单和一个提交按钮。下拉列表是一系列语言。用户可以更改语言并按提交按钮转到语言控制器并更新当前语言。

    public class LanguageController {

     @ModelAttribute("languageList")
       public LanguageList populateLanguageList() {
             return LanguageDAO.all();
       }

        @RequestMapping("/setLanguage.mvc")
        public ModelAndView setLanguage(
            @ModelAttribute("languageForm") LanguageForm languageForm,
                HttpServletRequest request, 
                HttpServletResponse response
                ){
            //do stuff
        }
    }


<form:form modelAttribute="languageForm">
    <form:select path="acctGrpId" >
        <form:options items="${languageList}"/>
    </form:select>
        <input type="submit"/>
</form:form>

我如何在每个页面上提供该功能?鉴于该页面可能是您正在编辑/创建用户的页面,因此该页面的“Controller”实际上是UserController,RoleController或DepartmentController,而不是LanguageController。无论页面在做什么,我都需要这个特定的jsp来命中特定的控制器。

4 个答案:

答案 0 :(得分:3)

您只需以不同的形式指定不同的动作属性。在一个页面上有多个表单没有问题。

在你的情况下,它将是:

<form action="Context/adduser.mvc">
</form>

<form action="Context/addBookmark.mvc">
</form>

答案 1 :(得分:0)

我很乐意帮助你,但我不确定你的要求。

您是在谈论具有各种方法的BookMarkController并添加/上传调用方法吗?

或者您希望BookMarkController有多个表单?

你能详细说明一下吗?

我相信,您希望所有jsp页面都将数据发布到控制器,该控制器可以在单击链接时保存表单。这很简单,您可以在所有控制器中添加一个savePage方法并相应地映射uri,并且可以从savePage方法将请求重定向到您编写的特定控制器以保存页面。

希望这有帮助。

答案 2 :(得分:0)

您的JSP是视图,它与您的控制器是分开的。这就是MVC的优点,即模型,视图和控制器的分离。您不一定要将视图视为绑定到控制器,或将页面视为具有“当前”控制器。是的,我们经常使该关联非常强大,因为控制器处理填充模型属性以呈现视图并处理由于视图中的操作而导致的表单帖子,但实际上任何控制器都可以返回任何视图,只要它填充了模型正确,任何视图都可以提交给任何控制器。视图甚至可以在不同的时间提交给不同的控制器,具体取决于所遵循的URL。

因此,在您的情况下,正如soulcheck所说,您只需更改表单提交的URL即可。因为控制器是由@RequestMapping映射的,所以只要Spring MVC可以找到合适的RequestMapping,更改表单的操作就会改变提交表单时调用的控制器类和/或方法。

答案 3 :(得分:0)

这是你在找什么?

What are the best practices around setting global model attributes in Spring MVC?

  

实现HandlerInterceptor,并将数据公开给每个请求