Spring MVC – 将变量从一个页面传递给另一个页面
我需要帮助。 我正在开展一个项目,我有多个页面和多个表格; 每个页面都有一个表单。 我只需要能够将值从一个jsp传递到另一个jsp。 我该怎么办?
我是Spring MVC的新手。 我使用的是2.5.6弹簧。
这是我的设计:
formPage1.jsp – > Controller1 – > formPage2a.jsp – > Controller2需要val frm pg1&pg2a。 formPage1.jsp – > Controller1 – > formPage2b.jsp – > Controller3需要val frm pg1&pg2b。 formPage1.jsp – > Controller1 – > formPage2c.jsp – > Controller4需要val frm pg1&pg2c。
如上所示,formPage1.jsp可以加载formPage2a,formPage2b或formPage2c。 根据formPage1.jsp中提供的输入,它转到控制器(它是SimpleFormController的扩展),控制器获取user = command对象输入的值。
我希望能够在将formPage2a,formPage2b或formPage2c提交给另一个控制器时使用这些命令对象值。
这是当前的代码:
formPage1.jsp:
Choose Client
*
Controller1.java
public class TestController extends SimpleFormController { /** Logger for this class and subclasses */ protected final Log logger = LogFactory.getLog(getClass()); public TestController() { logger.info("entering TestController.constructor.."); setCommandClass(UserPreference.class); setCommandName("userPreference"); } public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws ServletException { logger.info("entering TestController.onSubmit all.."); UserPreference userPreference = (UserPreference) command; ModelAndView view = null; if ("abc".equals(userPreference.getClient())) { GainLossRequest gainLossRequest = new GainLossRequest(userPreference); view = new ModelAndView("redirect:/test/gainLossRequest.htm", "gainLossRequest", gainLossRequest); } else if ("def".equals(userPreference.getClient())) { IncomingPositionsRequest incomingPositionsRequest = new IncomingPositionsRequest(); view = new ModelAndView( "redirect:/test/incomingPositionsRequest.htm", "incomingPositionsRequest", incomingPositionsRequest); } else if ("xyz".equals(userPreference .getClient())) { TaxStrategyRequest taxStrategyRequest = new TaxStrategyRequest(); view = new ModelAndView("redirect:/test/taxStrategyRequest.htm", "taxStrategyRequest", taxStrategyRequest); } } }
formPage2a.jsp
Account Number (s): * User Chosen Client:
调度程序servlet配置
请帮忙!!
您必须使用JB Nizet上面提到的隐藏变量在第一页上保留用户输入的信息。 或者,您可以在模型属性中设置将在相应控制器上返回的值。
伪代码给你。
formPage1.jsp – > Controller1 – >通过从Request对象中检索它来设置此表单中的值 – > formPage2a.jsp – > Controller2将使用val frm pg1和pg2a。
这样就不需要维护会话属性。
您也可以手动使用会话属性,例如:
public ModelAndView handleRequest(HttpServletRequest request){ request.getSession().getAttribute("nameOfAttribute"); }
请注意将此作为带注释的控制器编写,我不记得xml配置控制器是否提供此function…
没有涉及Spring代码。 另一种选择是在控制器上使用@SessionAttribute注释:
@Controller @SessionAttributes("nameOfAttribute") public class MyController{ //your session attribute can be accessed in controller methods using @ModelAttribute public ModelAndView handleRequest(@ModelAttribute("nameOfAttribute")){ session.getAttribute("nameOfAttribute"); }
注意
完成后,您需要清除会话属性:
request.getSession().setAttribute("nameOfAttribute", null);
最简单的方法是使用第二页中的隐藏字段来存储用户在第一个表单中输入的内容。 这样,所有包含第一页的字段的字段都将以第二种forms提交。