使用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创建的。
答案 0 :(得分:1)
来自forum.magnolia-cms.com:
Re:使用addInclude
创建自定义Magnolia控件用于呈现控件的包含请求转到/.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