Spring @ModelAttribute только для одного метода-обработчика - PullRequest
2 голосов
/ 13 ноября 2010

Можно ли разрешить вызов метода @ModelAttribute только для определенного метода-обработчика и предоставить объект команды только для одного вызова метода-обработчика? Не для каждого метода обработчика в конкретном контроллере? Я использую весенний веб-портлет MVC, но он должен быть таким же ...

Поскольку этот цикл 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 Ответ

3 голосов
/ 13 ноября 2010

Если вам нужен этот уровень детального контроля, то вам нужно реорганизовать ваш код, то есть переместить метод-обработчик в его собственный класс.Spring MVC делает это очень легко, не должно быть никаких ограничений на этот вид рефакторинга.

...