Шаблон страницы отсутствует, а только страница jsp идет без шаблона в Magnolia-bossom

Я делаю приложение Spring, используя Magnolia CMS.

Это мой контроллер:

@Controller
@Template(title = "Unlock Form", id = "newPositionModule:components/unlockAccount")
public class UnlockAccountComponent {

@Autowired
private LoginServiceImpl loginServiceImpl;

@Autowired
private JavaMailSender mailSender;


@RequestMapping(value = "/unlockAccount", method = RequestMethod.GET)
public String render(@ModelAttribute("resetForm")ResetForm resetForm) {

    return "components/unlockAccountForm.jsp";
}
@RequestMapping(value = "/unlockAccount", method = RequestMethod.POST)
public String reset(@ModelAttribute("resetForm")ResetForm resetForm,HttpServletRequest request,BindingResult result) {
ResetFormValidator validReset = new ResetFormValidator();
    validReset.validate(resetForm, result);
     if (result.hasErrors()) {
            return "components/unlockAccountForm.jsp";
        }
 .....
 .....
  }
 }

Эта страница/компонент настраивается в шаблоне, который называется, например, main.

содержание страницы следующим образом:

   ----------------------------------------------
   <some header>
   ----------------------------------------------

   <form:form id="unlockAccForm" action="?" commandName="resetForm" method="POST">
    <blossom:pecid-input />
     <div class="form-group">
              <form:input path="resetMail" placeholder="Email address or mobile no." id="" class="form-control"/>
              <form:errors path="resetMail" cssClass="errorMessage" />
            </div>
     <div class="form-group">
                <button class="lgn_btn" type="submit">Unlock Account</button>
            </div>
     </form:form>
     ----------------------------------------------------------
     <some footer>
     ----------------------------------------------------------

Когда я отправляю форму, появляется сообщение об ошибке, поскольку оно проверяется с помощью валидатора, который вы можете видеть в контроллере.

Но приходит только jsp, но шаблон отсутствует, как и верхний и нижний колонтитулы.

Чтобы получить сообщение об ошибке, мы не должны перенаправлять страницу, так как сообщение об ошибке не придет из-за формирования нового объекта запроса.

может ли кто-нибудь предложить мне, как решить эту проблему.

Что я пропустил или сделал что-то не так с кодом.

если кому-то нужен дополнительный запрос или дополнительная информация, которую я не предоставил, пожалуйста, спросите меня.

пожалуйста, предложите.


person Sachi-17    schedule 09.04.2015    source источник


Ответы (2)


Скорее всего, это вызвано ошибкой в ​​настройке сопоставлений обработчиков.

После того, как ваш контроллер выполнился и вернул представление с сообщением об ошибке, представление отображается напрямую, а отображение страницы пропускается.

Вместо этого должно произойти то, что BlossomHandlerMapping должен увидеть, что это представление, а не перенаправление, и продолжить рендеринг страницы, а представление будет отображаться позже на странице. Это называется механизмом предварительного исполнения.

BlossomHandlerMapping должен быть настроен как обертка/декоратор перед всеми другими сопоставлениями обработчиков, чтобы это работало. Обычно он настраивается так:

<bean class="info.magnolia.module.blossom.preexecution.BlossomHandlerMapping">
  <property name="targetHandlerMappings">
    <list>
      <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
        <property name="useSuffixPatternMatch" value="false" />
      </bean>
      <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
    </list>
  </property>
</bean>

Обратите внимание, как RequestMappingHandlerMapping находится внутри BlossomHandlerMapping.

Если у вас настроен BlossomHandlerMapping, убедитесь, что все сопоставления обработчиков находятся внутри него. Также обратите внимание, что при его использовании будут добавлены сопоставления обработчиков, которых нет в BlossomHandlerMapping, и предварительное выполнение не будет работать.

person sigget    schedule 17.04.2015

Предполагая, что верхний и нижний колонтитулы, которые вы пропустили в ответе, отображаются другими компонентами на странице, а не тем, который отображает форму, вы вероятно хотите отображать всю страницу при ошибке, а не только компонент. Для этого вам нужно указать Blossom/Magnolia отображать всю страницу, а не только компонент. Дополнительные сведения см. в документации Blossom по рендерингу представлений.< br> Однако также возможно, что вы включили предварительное выполнение компонентов и перенаправляете при ошибке слишком рано. Вероятно, вы захотите изучить похожий пример в самом Blossom и сравните его с ваши настройки, чтобы выяснить, что именно не так.

Ответьте как можно скорее.

Потому что у вашей домашней работы есть крайний срок, который вы можете пропустить? Одним этим комментарием вы могли бы оттолкнуть других людей, которые в противном случае были бы готовы помочь;)

person Jan    schedule 10.04.2015
comment
Привет @jan, я не могу получить твой ответ, и я не могу перейти по этой ссылке, не могли бы вы помочь мне понять на примере. - person Sachi-17; 13.04.2015
comment
@jan, у нас была такая же проблема, и из документа мы включили фильтр повторного выполнения цветов, но все же он отображал только компонент. - person sree; 16.04.2015