Java SpringMVC:如何在mvc中传递参数,而不在控制器上传递方法参数

Java SpringMVC:如何在mvc中传递参数,而不在控制器上传递方法参数,java,javascript,spring,spring-mvc,modelattribute,Java,Javascript,Spring,Spring Mvc,Modelattribute,我的任务是创建我的控制器,而不在方法签名处传递任何参数。 我很困惑,因为这是一个很大的挑战,我还没有在网上看到任何例子。 例如:从我的jsp页面 <form:form method="POST" action="/project/searchResults" id="productSearchResultsForm"> <input name="productRecord" id="productRecord" /> <inp

我的任务是创建我的控制器,而不在方法签名处传递任何参数。 我很困惑,因为这是一个很大的挑战,我还没有在网上看到任何例子。 例如:从我的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;
}
@RequestMapping(value=“/productSearch”,method=RequestMethod.GET)
public ModelAndView init(@modeldattribute(“showroomCode”)字符串showroomCode,HttpServletRequest){
logger.info(“>”);
收益模型;
}
我知道在Struts 2中,您可以在Action类中声明全局变量,这样您就可以在方法中自动使用它们,而无需将它们放入方法签名中。有没有办法去掉这个

谢谢

更新

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

1)使用属性productRecord、resultEntity、resultCode创建一个表单POJO。Ex MyForm.java

2) 在模型中设置此表单(在init方法中)例如:
model.addAttribute(“myForm”,new myForm())

3) 在jsp表单声明集中:

4) 在控制器中(检索结果)
@RequestMapping(value=“/productSearch”,method=RequestMethod.POST)
公共模型和视图postForm(MyForm MyForm,HttpServletRequest请求){…}


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

我不知道您为什么要这样做。。 但是,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
}

控制器的同一个实例用于所有请求,使用全局变量解决方案无法正确处理并发请求…感谢Adam,您知道在spring mvc中如何实现这一点吗?您可以将HttpServletRequest添加到方法中,然后使用一系列request.getParameter()如果您担心您的方法有太多参数,则调用…谢谢,您认为不使用模态属性和HttpSevlet请求就可以执行此操作吗?谢谢,您认为不使用模态属性和HttpSevlet请求就可以执行此操作吗?对于GET方法,您必须在模型中设置信息,以便在jsp中使用它。对于POST方法,至少需要一个参数来检索表单值。HttpServletRequest参数不是必需的,但必须使用模型。如果您不能使用HttpServletRequest或Model,那么您可以使用什么来发送/检索数据?这是我不知道的,也是我正在研究的,因为我的老板认为这是提高性能的最优化的方法(好的……那就问问你的老板如何交换数据吧;)老实说,我什么都没想到,对我来说,在servlet中开发服务时,必须使用HttpServletRequest/HttpServletResponse。