Magnolia Blossom addinclude

时间:2013-01-04 19:51:23

标签: spring jsp spring-mvc content-management-system magnolia

使用Blossom 2和Magnolia 4.5,我试图做这样的事情:

@Controller
@Template(id = "topicpages:pages/topics", title = "MyTemplate")
public class TopicTemplate {
...
@TabFactory("DialogInclude2")
public void topicTagTab2(TabBuilder tab){
tab.addInclude("topicpages/pages/topicLayout.jsp");
}
...
}

代码还有一点,但我认为这是相关的部分。问题是,当我尝试以这种方式包含JSP时,我收到以下错误: 2013年1月3日下午2:48:33 org.springframework.web.servlet.DispatcherServlet noHandlerFound 警告:在DispatcherServlet中找不到带有URI [/.magnolia/dialogs/topicpages/pages/topicLayout.jsp]且名称为“controller”的HTTP请求的映射

我熟悉http://wiki.magnolia-cms.com/display/WIKI/Creating+a+custom+control+with+DialogInclude上的dialoginclude教程,但我不知道如何做到这一点:“对于使用控件的对话框,需要定义一个名为controlType的内容节点,其值为'include'和另一个命名文件,其值是要包含的JSP的位置。“因为我的所有对话都是通过Blossom创建的。

1 个答案:

答案 0 :(得分:1)

来自forum.magnolia-cms.com:

Re:使用addInclude

创建自定义Magnolia控件

2由tmattsson于2013年1月8日上午11:04:27

用于呈现控件的包含请求转到/.magnolia/dialogs/topicpages/pages/topicLayout.jsp,因为您指定了JSP的相对路径。这就是它以/.magnolia/dialogs/开头的原因。如果这不是你想要的,你应该使用JSP的绝对路径。该请求由名为DispatcherServlet的Spring controller处理,该WEB-INF没有与此路径匹配的控制器(处理程序)。

尝试将JSP直接放在addInclude("/WEB-INF/topicLayout.jsp")文件夹中,看看是否可以使用include覆盖它。

如果你试图对一个控制器将渲染控制器(处理程序)的Spring DispatcherServlet进行include,那么你可以在你的模块描述符中配置它并定位{{1}它和它内部的控制器。在这种情况下,.jsp扩展名不是必需的。它可能类似于:addInclude("/custom-controls/topicLayout");

请注意,将JSP文件保存在WEB-INF文件夹中始终是一个好主意,因为出于安全原因,这些文件无法从外部访问。同样,您应该注意,您在管理界面中添加的用于支持编辑的功能不应该从外部公开获得。映射到/.magnolia以下的所有内容都受到保护,需要登录。

希望有所帮助!

// Tobias