spring-mvc:如何在控制器中没有方法参数的情况下传递mvc中的参数

时间:2014-09-29 13:45:01

标签: java javascript spring spring-mvc modelattribute

我的任务是在方法签名处创建我的控制器,不带 传递任何参数。 我感到非常困惑,因为这是一个相当大的挑战,我还没有在网上看到任何例子。 例如:来自我的jsp页面。

    <form:form method="POST" action="/project/searchResults" id="productSearchResultsForm">
        <input name="productRecord" id="productRecord" />
        <input name="resultEntity" id="resultEntity" type="hidden" />
        <input name="resultCode" id="resultCode" type="hidden" />
        <button type="submit" class="btn btn-primary btn-lg">Submit</button>
    </form:form>

我想将这三个输入传递给我的控制器,而不使用方法签名处的@RequestParameter和@ModelAttribute。截至目前,这是我知道如何做到这一点的唯一方式。

@RequestMapping(value = "/productSearch", method = RequestMethod.GET)
public ModelAndView init(@ModelAttribute ("showroomCode") String showroomCode, HttpServletRequest request) {


    logger.info("<<<< initial page <<<<<<");
    logger.info("Showroom Code : " + showroomCode);

    HttpSession session = request.getSession();

    ModelAndView model = new ModelAndView("productSearch", "command",
            String.class);


     ShowroomUser user = new ShowroomUser();
     user.setUserId(1);
     session.setAttribute("usersession", user);
     session.setAttribute("showroomCode", showroomCode);

     logger.info(">>>>> initial page >>>>> ");
     return model;
}

我知道在Struts 2中,您可以在Action类中声明全局变量,这样您就可以在方法中自动使用它们,而无需将它们放在方法签名中。有没有办法删除这个?

感谢。

更新

我被要求不要在代码中的任何地方使用HttpServlet请求和模型属性。 :( 请帮忙!

2 个答案:

答案 0 :(得分:2)

1)使用您的属性productRecord,resultEntity,resultCode创建表单POJO。 Ex MyForm.java

2)在模型中设置此表单(在init方法中)Ex:model.addAttribute("myForm", new MyForm())

3)在你的jsp表单声明集中: <form:form commandName="myForm" >

4)在你的控制器中(检索结果) @RequestMapping(value = "/productSearch", method = RequestMethod.POST) public ModelAndView postForm(MyForm myForm, HttpServletRequest request) {...}

然后,您可以使用myForm.getProductRecord()来访问值。

答案 1 :(得分:0)

我不知道你为什么要这样做.. 但是,Spring将请求公开为ThreadLocal。您可以在当前线程上访问它,但是您可以在不传递任何产生的线程的情况下访问它。

这是你做的事情:

@RequestMapping("/whatever")
public ModelAndView controllerMethod() {
    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();

// Do as you want with the request without having to pass it in
}