NutzCN Logo
问答 请问在项目多模块下,子模块写对应的controller就不能指定到子模块下的webapp下面吗?
发布于 2874天前 作者 sherwin28 4711 次浏览 复制 上一个帖子 下一个帖子
标签: beetl

项目结构
--zango (父模块)
--portal (web子模块)

子模块的controller

@IocBean
@At("/portal/buy")
public class BuyController {
    private static final Log log = Logs.get();
    @Inject
    private CmsSiteService cmsSiteService;

    @At({"/cart"})
    @Ok("beetl:/portal/buy/cart.html")
    public void cart(String id,HttpServletRequest req) {

    }
}

报错信息

2017-01-08 15:13:54,132 org.beetl.ext.nutz.LogErrorHandler.processExcption(LogErrorHandler.java:32) DEBUG -  模板根目录为 D:\IdeaProjects\zango\src\main\webapp\WEB-INF\views
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:122)
>>03:13:54:错找不到指定模板或者加载错(TEMPLATE_LOAD_ERROR): 位于0行 资源:/portal/buy/cart.html 模板根目录为 D:\IdeaProjects\zango\src\main\webapp\WEB-INF\views
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)

	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
2017-01-08 15:13:54,133 com.zango.common.processor.LogTimeProcessor.process(LogTimeProcessor.java:26) DEBUG - [GET ]URI=/portal/buy/cart 36ms
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

路径怎么指向父模块去了

5 回复

这个取决于 beetl.properties 的配置

这里没有配置模块的呀!

RESOURCE_LOADER=org.beetl.core.resource.WebAppResourceLoader
RESOURCE.root= /WEB-INF/views
RESOURCE.functionSuffix = html
RESOURCE.autoCheck= true
DELIMITER_STATEMENT_START=<%
DELIMITER_STATEMENT_END=%>

FT.escape=com.zango.common.view.beetl.HtmlEscapeFormat

也许要走ClasspathResourceLoader才行了

WebAppResourceLoader貌似只会按文件夹取

确认一下你的beetl版本是否是最新的,nutz集成曾经改过,以适应maven项目找不到web根目录的情况

以前有问题,是因为模板引擎本身是很难判断web根目录在哪儿的(虽然可以尝试,但有些环境有问题),nutz后来可以主动设置web根目录

public BeetlViewMaker() throws IOException {
        // 主动设置webroot, 解决maven项目下,Beetl无法找到正确的webapp路径的问题
    		String webroot = null;
    		if(Mvcs.getServletContext()!=null){
    			webroot = Mvcs.getServletContext().getRealPath("/");
    	        if (!Strings.isBlank(webroot))
    	            BeetlUtil.setWebroot(webroot);
        }
    		 
        init();
    }

因此,理论上来说,最新版本的beetl应该是可以应付你这个情况的

@javamonkey 我晚点试试。感谢建议

来自炫酷的 NutzCN

添加回复
请先登陆
回到顶部