页面模板缺失而只有jsp页面在Magnolia-blossom中没有模板

时间:2015-04-09 05:43:24

标签: spring magnolia

我正在使用Magnolia CMS进行Spring应用程序。

这是我的控制者:

@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";
        }
 .....
 .....
  }
 }

此页面/组件正在名为eg 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即将到来,但模板缺失,如页眉和页脚缺失。

要获取错误消息,我们不应该重定向页面,因为新请求对象形成不会出现错误消息。

任何人都可以建议我如何解决这个问题。

我错过了什么或者代码有什么问题。

如果有人需要更多查询或我没有提供的更多细节,请问我。

请建议。

2 个答案:

答案 0 :(得分:1)

这很可能是由处理程序映射配置错误引起的。

执行控制器并返回带有错误消息的视图后,将直接呈现视图并跳过页面呈现。

相反应该发生的事情是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中的处理程序映射,并且预执行将无效。

答案 1 :(得分:0)

假设页面中的页眉和页脚在页面中的其他组件呈现的时间比呈现表单的页眉和页脚更少,那么可能想要的是在整个页面上呈现错误而不仅仅是组件。要实现这一点,您需要告诉Blossom / Magnolia渲染整个页面而不仅仅是组件。有关详细信息,请参阅Blossom documentation on view rendering 但是,您也可能已启用组件的预执行,并且过早地重定向错误。您可能希望学习similar example in Blossom itself并将其与您的设置进行比较,以找出确切的错误。

  

尽快回复。

因为您的作业有最后期限可能会错过?仅凭这个评论你可能会抛弃其他愿意帮助的人;)