Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 表单支持bean未保留已设置的属性值_Java_Spring Mvc - Fatal编程技术网

Java 表单支持bean未保留已设置的属性值

Java 表单支持bean未保留已设置的属性值,java,spring-mvc,Java,Spring Mvc,我正在使用这样的表单支持bean public class BeanData implements Serializable{ private String param1; private String param2; private String param3; private String param4="india"; getters setters } 然后在模型中发送bean对象,如下所示- @RequestMapping(value=/f

我正在使用这样的表单支持bean

public class BeanData implements Serializable{

    private String param1;
    private String param2;
    private String param3;
    private String param4="india";

    getters setters
}
然后在模型中发送bean对象,如下所示-

@RequestMapping(value=/formPage, method={RequestMethod.GET,RequestMethod.POST})
    public ModelAndView getPage(HttpSession session, ModelAndView modelAndView) {   

        BeanData formBean = new BeanData();
        formBean.setParam2("123456"); // this param2 doens't have any field in JSP
        modelAndView.addObject("formBean", formBean);
        modelAndView.setViewName(PAGE);

        return modelAndView;
    }
@RequestMapping(value=submitData, headers="Accept=*/*", method={RequestMethod.POST})
    public void submitData(@Valid @ModelAttribute("formBean") BeanData formBean, BindingResult result, HttpServletRequest request,HttpServletResponse response,ModelAndView modelAndView, HttpSession session) {


        LOGGER.info("param1:"+formBean.getParam1()); // Param1 has a path map in jsp field. So whatever user is puuting into form field, that is getting populated here
        LOGGER.info(" param2:"+formBean.getParam2()); // It has not been used in JSP. Though from controller it was populated before sending the bean to the jsp. but here the value is null . This is the concern
        LOGGER.info("param3:"+formBean.getParam3());// Param1 has a path map in jsp field. So whatever user is puuting into form field, that is getting populated here
        LOGGER.info("param4:"+formBean.getParam4());//thsi field also has not been used in JSP. But this property was set in bean instantiation. It is also getting retrieved successfully.


        modelAndView.setViewName(SUCCESS PAGE);

    }

我关心的是,我希望使用setter方法设置一个bean属性,并希望将bean backing对象传递给JSP。然后,所有属性值都应该绑定到备份对象(我使用form Field path属性显式绑定的内容,以及我在创建bean对象时已经设置的内容),并且应该在控制器中接收。请告诉我哪里做错了。

如果您只想在JSP中保留
param2
字段的值并在表单提交时将其恢复,您可以使用隐藏字段将其绑定,如下所示:

<form:hidden path="formBean.param2"/>

它将不会显示在JSP中,但它将保持您的值不变


另一种方法是将
BeanData
存储到会话中。

如果您只想在JSP中保留
param2
字段的值并在表单提交时将其恢复,您可以使用隐藏字段将其绑定,如下所示:

<form:hidden path="formBean.param2"/>

它将不会显示在JSP中,但它将保持您的值不变


另一种方法是将
bean数据存储到会话中。

模型属性是请求范围的bean。您可以使用的解决方案:

  • 将属性映射到html表单中的隐藏字段。我不建议这样做,因为它们可以在客户端轻松更新
  • 使用会话属性而不是模型属性,我认为这是最后一个选项
  • 您真正应该做的是将表单bean的创建委托给一个用
    @modeldattribute
    注释的方法,而不是在
    getPage
    方法中这样做
Spring在处理请求之前执行带有
@modeldattribute
注释的方法,然后用表单中的属性更新对象

@ModelAttribute("formBean")
public BeanData setFormBeanModel()
{
  BeanData formBean = new BeanData();
  formBean.setParam2("123456");
  return formBean;
}

@RequestMapping(value=/formPage, method={RequestMethod.GET,RequestMethod.POST})
public ModelAndView getPage(HttpSession session, ModelAndView modelAndView) 
{ 
  modelAndView.setViewName(PAGE);

  return modelAndView;
}

模型属性是请求范围的bean。您可以使用的解决方案:

  • 将属性映射到html表单中的隐藏字段。我不建议这样做,因为它们可以在客户端轻松更新
  • 使用会话属性而不是模型属性,我认为这是最后一个选项
  • 您真正应该做的是将表单bean的创建委托给一个用
    @modeldattribute
    注释的方法,而不是在
    getPage
    方法中这样做
Spring在处理请求之前执行带有
@modeldattribute
注释的方法,然后用表单中的属性更新对象

@ModelAttribute("formBean")
public BeanData setFormBeanModel()
{
  BeanData formBean = new BeanData();
  formBean.setParam2("123456");
  return formBean;
}

@RequestMapping(value=/formPage, method={RequestMethod.GET,RequestMethod.POST})
public ModelAndView getPage(HttpSession session, ModelAndView modelAndView) 
{ 
  modelAndView.setViewName(PAGE);

  return modelAndView;
}

提交表单后是否要检索设置为
param2
的值?提交表单后是否要检索设置为
param2
的值?如果来自JSP的值为
null
,则调用POST方法时将相同。这个问题在这里没有解决。虽然这肯定是一个更好的方法,但我很好奇这是否能解决问题。对于控制器中的每个请求映射,也将调用带有
@modeldattribute
注释的方法。@VPK,它不会发送到null,只是根本不会发送。如果不发送属性,spring将如何更新它?第一个Spring使用
@modeldattribute
方法创建对象,然后使用form参数为同一个模型属性更新来自表单的属性。如果未发送属性,则不会更新该属性。正如我所说,不建议使用表单隐藏字段或会话属性。对,如果未发送的属性未更新,那么它将保持
null
,它将如何解决问题?正如您所说,“First Spring使用@ModelAttribute方法创建对象,然后使用表单参数更新来自表单的同一模型属性的属性。“-此处
param2
的参数值为
null
,因此即使在
setFormBeanModel()
完成后,它仍保持
null
。@VPK请再次阅读我的代码。我正在
@modeldattribute
方法中将一个值设置为param2 int。如果来自JSP的值是
null
,那么调用POST方法时,它将是相同的。这个问题在这里没有解决。虽然这肯定是一个更好的方法,但我很好奇这是否能解决问题。对于控制器中的每个请求映射,也将调用带有
@modeldattribute
注释的方法。@VPK,它不会发送到null,只是根本不会发送。如果不发送属性,spring将如何更新它?第一个Spring使用
@modeldattribute
方法创建对象,然后使用form参数为同一个模型属性更新来自表单的属性。如果未发送属性,则不会更新该属性。正如我所说,不建议使用表单隐藏字段或会话属性。对,如果未发送的属性未更新,那么它将保持
null
,它将如何解决问题?正如您所说,“First Spring使用@ModelAttribute方法创建对象,然后使用表单参数更新来自表单的同一模型属性的属性。“-此处
param2
的参数值为
null
,因此即使在
setFormBeanModel()
完成后,它仍保持
null
。@VPK请再次阅读我的代码。我正在
@modeldattribute
方法中将一个值设置为param2 int。如果不是,那就没有意义了。