如何在控制器中使用相同的方法,接收抽象类?

时间:2014-01-28 15:12:51

标签: java forms jsp spring-mvc spring-roo

我有5种不同的jsp和mvc弹簧形式。在每个表单的modelAttribute中,我有一个特定的类(例如,dog,cat,mouse等)。每个表单都有一个提交按钮,我希望该请求将在控制器中以相同的方法提交 在控制器中,我试图获得一般类(抽象)这样的动物。它给了我一个错误。我怎么能这样做?

如果收到猫,这样可以。 谢谢!

jsp:

<form:form method="post" modelAttribute="Cat" action="../2/submit">
            <form:checkbox path="attribute" />
            <button type="submit">Submit</button>
</form:form>

和控制器:

@RequestMapping(value = "/submit",  produces ="text/html" ,headers = "Accept=" ,  method=RequestMethod.POST) 
    public String submitForm(@ModelAttribute Animal animal, Model m) throws IllegalArgumentException, IllegalAccessException {
        return "";
    }

2 个答案:

答案 0 :(得分:0)

我可以想到两种技巧。

技术:旧学校

在处理程序方法中使用类型WebRequest的参数。 这样可以访问请求参数。 然后查询您关心的参数以​​确定请求的来源并确定所需的参数。

@RequestMethod("/blammy")
public String blammy(
    final ModelMap model,
    final WebRequest webRequest)
{
    String something = webRequest.getParameter("something");

    if ("hoot".equals(something))
    {
        ... process a hoot request
    }
    else if ("bark".equals(something))
    {
        ... process a bark request
    }
}

技术:前端控制器

为每个表单证明了一种方法,然后将调用转发给常用方法。

@RequestMethod("/fish")
public String fish(
    @ModelAttribute final Fish fish,
    final ModelMap model)
{
     return commonMethod(model, (Animal)fish);
}

@RequestMethod("/cat")
public String cat(
    @ModelAttribute final Cat cat,
    final ModelMap model)
{
     return commonMethod(model, (Animal)cat);
}

public String commonMethod(
    final ModelMap model,
    final Animal animal)
{
    ... blam
}

答案 1 :(得分:0)

您不应该统一请求处理程序方法,尽管使用具有所需业务层的服务层,以便所有控制器都可以调用相同的业务逻辑。