繁体   English   中英

Spring MVC使用单个控制器管理多个视图

Spring MVC managing multiple views with single controller

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

寻找实现订单管理模块的有效方法。 有不同的订单类型(大约15种)。 每个订单都有单独的视图。 但是,无论订单类型如何,在UI上执行的操作都是相同的。 以下是我的DTO的结构

abstract class Order

abstract class SecurityOrder extends Order

abstract class TermDepositOrder extends Order
.....
.....
.....

我正在尝试实现一个能够管理所有视图的控制器。 与以下内容类似:

@Controller
public class OrderController<F extends Order> {

    public F validate(F order) {
    }

    public F insert(F order) {
    }
}

我不确定spring mvc如何将请求参数正确映射到订单实例,因为它不知道要实例化哪个订单实例。

是否可以使用单个控制器来实现此目的,还是应该为每种订单类型使用一个控制器,并在所有订单中重复相同的代码?

1 个回复

通过提供自定义方法处理器能够做到这一点。 下面是示例代码。

定制实施:

public class OrderControllerArgumentResolver extends 
            ModelAttributeMethodProcessor { 

    public OrderControllerArgumentResolver() { 
            super(true); 
    } 

    @Override 
    public boolean supportsParameter(MethodParameter paramMethodParameter) { 
            //Resolve - custom annotation created to differentiate order parameter from others. 
            //This is to make sure this resolver is used only while resolving OrderDTO is used as method parameter 
            if (paramMethodParameter.getParameterAnnotation(Resolve.class) != null) { 
                    return true; 
            } 
            return false; 
    } 

    @Override 
    protected final Object createAttribute(String attributeName, 
                    MethodParameter parameter, WebDataBinderFactory binderFactory, 
                    NativeWebRequest request) throws Exception { 
            //Instantiate appropriate order instance based on input. 
            return BeanUtils.instantiateClass(OrderTypeEnum.getDTOClass(request 
                            .getParameter("orderType"))); 
    } 

    @Override 
    protected void bindRequestParameters(WebDataBinder binder, 
                    NativeWebRequest request) { 
            ServletRequest servletRequest = request 
                            .getNativeRequest(ServletRequest.class); 
            ServletRequestDataBinder servletBinder = (ServletRequestDataBinder) binder; 
            servletBinder.bind(servletRequest); 
    } 
}

组态:

<mvc:annotation-driven>
    <mvc:argument-resolvers> 
            <bean 
                    class="test.util.OrderControllerArgumentResolver" /> 
    </mvc:argument-resolvers> 
</mvc:annotation-driven>

用这种方法能够达到预期的效果。 但不确定这种方法是否会引起任何其他问题。 请提出建议。

1 单个控制器的MVC多个视图

在MVC中是否可以使用单个控制器“ListController”执行以下操作来处理以下页面... www.example.com/List/Cars/ForSale/{id}可选 www.example.com/List/Cars/ForRent/{id}可选 www. ...

2 MVC-为单个视图调用多个控制器

我有一个视图,一次显示所有学生,课程和主题。 我有3个不同的控制器,每个控制器都有一个模型。 我不想将3个不同的模型合并为一个模型,然后进行单个控制器调用。 相反,我需要3个不同的控制器,并对这些控制器进行3次调用。 如何做到这一点? - 视图 ...

3 如何在控制器/视图 mvc 中使用多个模型?

我有两个模型; 一个保存页面上显示的字段的值,另一个根据用户变量保存该页面的必填字段。(将其视为一个组合框,对于每个变量,为页面呈现不同的字段)。 我的问题是在单个视图/控制器中使用这两个模型的最有效和最易于管理的方法是什么? 我试图对它们进行元组化,但我发现我需要创建一个无参数的构造函数错误。 谢 ...

4 iOS - 在单个屏幕上使用多个视图控制器

在iOS中,如果屏幕包含许多功能,我很难保持视图控制器的代码清洁,因为为同一屏幕定义了许多方法。 特别是对于(例如UITableView , UIAlertView等)的委托方法,或者如果同一个VC文件同时支持iPad和iPhone,它很快变成一团糟。 我也意识到,如果你使用#ifdef ...

5 在单个视图控制器中使用多个nib文件?

背景 我正在使用界面构建器为我正在处理的应用程序创建UI。 该应用程序有一个显示一系列按钮的屏幕。 单击按钮可显示覆盖按钮的关联视图。 单击另一个按钮会隐藏上一个叠加视图并显示另一个。 在IB中更容易管理UI我决定为每个子视图创建多个nib文件,这些文件在单击相关按钮时显示。 ...

6 单个控制器的范围,多个视图

我一直在研究新的Java 1.8 + CDI + WildFly和JSF 2.2。 我已经阅读了很多有关范围的内容,但仍然无法弄清楚我应该使用哪个范围,或者使单个控制器与不同视图一起使用的最佳实践是什么。 无法使用@ViewScoped因为它仅适用于一个视图。 @SessionSc ...

7 单个视图中的多个控制器

我最近刚开始使用CakePHP,到目前为止,我一直很喜欢它,尤其是脚手架和烘烤。 我正在构建一个Webapp,它将管理公司的应用程序。 (即,我向何处提出申请,与谁交谈过,申请的状态,自从我发送/接收有关此申请的通讯以来已经有多长时间了。) 我有一个应用程序模型和一个动作模型。 ...

9 将控制器的多个模型发送到单个视图以获取不同形式的MVC

请考虑我有两种形式的学生表格和教师表格。 每个都有不同的形式动作。 我需要一次通过控制器传递这两个模型。 因此,我决定将2纳入新的模型类别: 并从控制器发送模型: 在视图中,我有2个局部视图,一个用于学生形式,一个用于教师形式。 对于学生形式将是这样的: 仅在问题 ...

10 单个MVC控制器用于多个视图

我有一个使用Angular JS设计的应用程序。 我正在使用2个视图的单个服务器端控制器(MVC控制器)。 但是现在需要确定哪个视图正在加载控制器,因为在加载两个视图中的任何一个时都会调用同一控制器。 我只想要调用控制器的视图的URL。 我尝试使用HTTPContext对象,但是它没有给 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM