代码之家  ›  专栏  ›  技术社区  ›  lisak

仅一个处理程序方法的spring@modelattribute

  •  2
  • lisak  · 技术社区  · 14 年前

    是否可以只为特定的处理程序方法调用@modelattribute方法,并只为一个处理程序方法调用提供命令对象?不是针对特定控制器中的每个处理程序方法?我使用的是SpringWebPortletMVC,但应该是相同的…

    因为这个for循环是为一个控制器内的每个处理程序方法调用而调用的,而implicitModel是为每个进入视图的请求提供的。

    for (Method attributeMethod : this.methodResolver.getModelAttributeMethods()) {
                    Method attributeMethodToInvoke = BridgeMethodResolver.findBridgedMethod(attributeMethod);
                    Object[] args = resolveHandlerArguments(attributeMethodToInvoke, handler, webRequest, implicitModel);
                    if (debug) {
                        logger.debug("Invoking model attribute method: " + attributeMethodToInvoke);
                    }
                    String attrName = AnnotationUtils.findAnnotation(attributeMethodToInvoke, ModelAttribute.class).value();
                    if (!"".equals(attrName) && implicitModel.containsAttribute(attrName)) {
                        continue;
                    }
                    ReflectionUtils.makeAccessible(attributeMethodToInvoke);
                    Object attrValue = attributeMethodToInvoke.invoke(handler, args);
                    if ("".equals(attrName)) {
                        Class resolvedType = GenericTypeResolver.resolveReturnType(attributeMethodToInvoke, handler.getClass());
                        attrName = Conventions.getVariableNameForReturnType(attributeMethodToInvoke, resolvedType, attrValue);
                    }
                    if (!implicitModel.containsAttribute(attrName)) {
                        implicitModel.addAttribute(attrName, attrValue);
                    }
                }
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   skaffman    14 年前

    如果您需要这种级别的细粒度控制,那么您需要重构代码,即将处理程序方法移动到自己的类中。SpringMVC使得这非常容易,对这种重构应该没有限制。

    推荐文章