public static String getRelPath(String siblings, String resourceId) {
String relResourceId = null;
if (resourceId != null && resourceId.length() != 0) {
char cs = resourceId.charAt(0);
if (cs != '\' && cs != '/') {
int i = siblings.length() - 1;
boolean find;
for(find = false; i > 0; --i) {
char c = siblings.charAt(i);
if (c == '\\' || c == '/') {
find = true;
break;
}
}
if (find) {
String parent = siblings.substring(0, i + 1);
**relResourceId = parent.concat(resourceId);**
} else {
relResourceId = resourceId;
}
} else {
relResourceId = resourceId;
}
if (isOutsideOfRoot(relResourceId)) {
throw new RuntimeException("不能访问外部文件或者模板");
} else {
return relResourceId;
}
} else {
throw new RuntimeException("资源ID为空,参数错");
}
}
relResourceId = parent.concat(resourceId);
没有把 分割符 删除后再拼接。
比如:include("http:/xxx.html"){},不应该把http:也拼接进来。
include是否有更合理的写法?
不太懂你需求,说出的你的需求来,
这是一个人提供得,你可以参考这个类写一个
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
@闲.大赋(李家智) ,因为使用使用CompositeResourceLoader 组合ClassPathResourceLoader和FileResourceLoader,现在想在FileResourceLoader里面使用include标签,发现找不到对应的资源,跟踪代码发现发现relResourceId = parent.concat(resourceId);返回的是:
父目录+http:/xxx.html,也就是无法找到正确的模板资源。
哦,不清楚你场景,为什么用http:/xxx.html方式了,我理解文件还是classpah,都是文件模式,在beetl中有个单元测试CompositeResourceLoader CompositeResourceLoaderTest你可以参考一下,另外如果你觉得include有问题,你可以重新覆盖,注册一个自己的include实现
TAG.include= org.beetl.ext.tag.YourIncludeTag
@闲.大赋(李家智) ,好的,谢谢,我自己实现了include,不过确实存在CompositeResourceLoader 中include加载不到的问题,http:是为了方便标注是从classpath下面的模板文件还是file下面的模板文件。
好的,我看看include
登录 后才可以发表评论