我正在构建一个Vaadin(基本上是编译为html / javascript的Java)项目,并且我正在尝试导入模板(基本上是一个HTML文件)。考虑到所有意图和目的,我只是将文件作为输入流导入。这是违规代码:
File file = new File("C:/JavaProjects/VaadinSpikeWorkspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/CISTVaadinClient/VAADIN/themes/layoutsinteractionDetailsTabLayout.html");
InputStream is = null;
CustomLayout custom = null;
try {
is = new FileInputStream(file);
} catch (FileNotFoundException e1) {
System.out.println("mark 1");
e.printStackTrace();
}
try {
custom = new CustomLayout(is);
} catch (IOException e) {
System.out.println("mark 2");
e.printStackTrace();
}
我在做什么:
我所看到的:
我检查了什么:
我尝试了什么
同样,我试图简单地将文件MyFile.html作为输入流读取。我做错了什么/忽视?
感谢您的时间。
答案 0 :(得分:0)
只是为了让它更具便携性:您是否考虑过将模板带入classpath
?像
yourApp/WEB-INF/classes/templates/layoutsinteractionDetailsTabLayout.html
这样,你只需要这行代码,假设你进入了Servlet或Spring Controller或Struts 1/2动作或任何名为YourClass
的行为:
InputStream is = YourClass.class.getClassLoader().getResourceAsStream("templates/layoutsinteractionDetailsTabLayout.html");
答案 1 :(得分:0)
当使用指向WebContent目录的VaadinService(内部有META-INF,VAADIN和WEB-INF)时,我没有读取文件的问题。如果它在测试环境中运行,那么VaadinService不可用,所以我使用这样的代码:
private static final String BASEDIR;
static {
if (VaadinService.getCurrent() != null) {
BASEDIR = VaadinService.getCurrent().getBaseDirectory().getAbsolutePath();
} else {
BASEDIR = "WebContent";
}
}
然后导航到VAADIN文件夹只需使用
BASEDIR+="/VAADIN/restOfYourPath"
答案 2 :(得分:0)
如果您真的想将此文件用作HTML模板,那么利用Vaadin对此的支持会更好。他们有CustomLayout
从您的主题加载HTML模板。
您的模板将进入如下文件夹:
VAADIN/themes/mytheme/layout/layoutsinteractionDetailsTabLayout.html
请注意,mytheme
是主题的名称,layout
是主题中特别认可的Vaadin目录。
您的自定义组件将如下所示:
public class InteractionDetailsTabLayout extends CustomLayout {
private static final String TEMPLATE = "layoutsinteractionDetailsTabLayout";
public InteractionDetailsTabLayout() {
super(TEMPLATE);
}
}
请注意,超级构造函数参数会排除目录和文件后缀。
如果您确实想要在webapp 中加载文件,请不要在VAADIN
目录中使用它,而是将其放在类路径资源中并使用{访问它{3}}