【问题标题】:Making ModelAttribute optional in Spring Controller method在 Spring Controller 方法中使 ModelAttribute 成为可选
【发布时间】:2015-02-15 16:00:36
【问题描述】:

我有一个控制器方法定义如下 -

@RequestMapping(method = RequestMethod.POST, value="/callMe")
public String myMethod(@ModelAttribute MyClass myObj, Model model) {
    //Do something
}

即使没有传递 ModelAttribute myObj,如何才能调用上述控制器方法。

我不想在没有它的情况下创建另一个控制器并复制功能。

【问题讨论】:

  • 如果您需要一个带模型和不带模型的模型,并且具有相同的功能,您可能需要重新考虑(部分)您的设计。此外,模型属性已经是可选的,将创建一个新实例(取决于您最初创建/存储模型属性的方式)。
  • 在我们的例子中,我们切换功能,所以它很有帮助

标签: java spring spring-mvc model-view-controller


【解决方案1】:

模型属性已经是可选的。即使您不传递模型属性,也会创建 myObj。所以检查

if(myObj == null){
   //Do method1
}else{
  //Do method2
}

不会工作。

试试这个。像这样在 myClass 中创建一个布尔值

private Boolean isGotMyObj = false;

在你的jsp中(提交模型属性)添加一个隐藏的输入像这样

<input type="hidden" value="1" name="isGotMyObj" />

然后在控制器中执行此操作

@RequestMapping(method = RequestMethod.POST, value="/callMe")
public String myMethod(@ModelAttribute MyClass myObj, Model model) {
    if (myObj.getIsGotMyObj()){
        //Got model attribute
        //Method 1
    }else{
        //Method 2
    }

    return "callme";
}

【讨论】:

    猜你喜欢
    • 2013-04-09
    • 2018-03-16
    • 2012-08-25
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2018-05-20
    相关资源
    最近更新 更多