我在这里读到,无论如何都不应该将文件保存在服务器中,因为它不是可移植的,事务性的并且需要外部参数.但是,鉴于我需要一个针对tomcat(7)的tmp解决方案,并且我对服务器机器有(相对)控制,我想知道:
保存文件的最佳位置是什么?我应该保存/WEB-INF/uploads
(建议不要在这里)或某个地方$CATALINA_BASE
(见这里)或......?JavaEE 6教程从用户获取路径(:wtf :).注意:该文件不应以任何方式下载.
我应该建立一个配置参数详见这里?我很欣赏一些代码(我宁愿给它一个相对路径 - 所以它至少是Tomcat可移植的) - Part.write()
看起来很有希望 - 但显然需要一个绝对的路径
我对这种方法与数据库/ JCR存储库的缺点的阐述感兴趣
不幸的是 ,@ BalusC 的FileServlet专注于下载文件,而他在上传文件时的答案会跳过保存文件的位置.
容易转换为使用DB或JCR实现(如长耳兔)的解决方案将是优选的.
我已经完成了关于Facelets模板的教程.
现在我尝试创建一个与模板不在同一目录中的页面.我有页面样式的问题,因为样式用相对路径引用,如下所示:
<link rel="stylesheet" href="style_resource_path.css" />
Run Code Online (Sandbox Code Playgroud)
我可以通过以下开头使用绝对引用/
:
<link rel="stylesheet" href="/project_root_path/style_resource_path.css" />
Run Code Online (Sandbox Code Playgroud)
但是,当我将应用程序移动到不同的环境时,这将给我带来麻烦.
所以我想知道在Facelets中引用CSS(以及JS和图像)资源的最佳方法是什么?
我在JSF上传文件.我正在使用Tomahawk <t:inputFileUpload>
,但同样的问题适用于例如PrimeFaces <p:fileUpload>
和JSF 2.2 <h:inputFile>
.
我有以下支持bean代码:
private UploadedFile uploadedFile; // +getter+setter
public String save() throws IOException {
String name = uploadedFile.getName();
System.out.println("File name: " + name);
String type = uploadedFile.getContentType();
System.out.println("File type: " + type);
long size = uploadedFile.getSize();
System.out.println("File size: " + size);
InputStream stream = uploadedFile.getInputStream();
byte[] buffer = new byte[(int) size];
stream.read(buffer, 0, (int) size);
stream.close();
}
Run Code Online (Sandbox Code Playgroud)
我能够获取文件名,类型和大小,但我无法将此文件保存在特定路径中.我无法找出保存上传文件的正确方法.我怎样才能做到这一点?
我在valueChangeListener上遇到了问题.我在Weblogic 6.0上使用JSF 1.2.
我有一个页面,页面顶部有2个单选按钮,名称为Name1和Name2.单击Name1时,单选按钮下方将显示Name1详细信息(大约30个字段),单击Name2时,将显示Name2详细信息.现在,用户可以更新单击的命名详细信息.例如,用户单击Name1并更改地址字段,然后单击Name2并更改Name2的年龄.当用户单击Name1时,地址应显示为使用新值更新,并且当用户单击Name2时,应再次更新年龄.
我使用valueChangeListener来解决它,因为我需要更改事件的旧值和新值.问题是,当在VALIDATION阶段结束时调用valueChangeListener时,我没有在valueChangeListener方法中获取Name1字段的更新地址.有人可以帮我解决问题吗?
我目前正在使用Primefaces fileUpload组件的拖放功能.它工作正常,但我想要的是通过将文件拖到我的页面的任何地方直接上传文件,而无需单击按钮.
我试过这个:
$('.dropzone').on({
'dragover dragenter': function (e) {
e.preventDefault();
e.stopPropagation();
},
'drop': function (e) {
var dataTransfer = e.originalEvent.dataTransfer;
if (dataTransfer && dataTransfer.files.length) {
e.preventDefault();
e.stopPropagation();
$.each(dataTransfer.files, function (i, file) {
uploadFile([{"name": "filename", "value": file.name}]);
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
<p:remoteCommand name="uploadFile" action="#{bean.uploadFile()}" />
Run Code Online (Sandbox Code Playgroud)
public void uploadFile(){
String filename =
FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap().get("filename");
}
Run Code Online (Sandbox Code Playgroud)
问题是这适用于文件名,但不适用于文件本身.这是正确的方法还是有办法将files
列表转发到Primefaces fileUpload并以编程方式提交文件而不使用gui-component?
jsf ×4
file-upload ×3
facelets ×1
jsf-2 ×1
primefaces ×1
resources ×1
save ×1
servlet-3.0 ×1
servlets ×1
templating ×1
tomcat ×1