我正在使用简单模式的primefacas fileUpload(由于其他一些原因不使用高级模式)。我使用 style="display:none" 使 fileUpload “隐藏”,然后添加一个带有命令按钮的 inputText 来表示 fileUpload(因为通过这种方式我可以更轻松地进行设计)。
当用户单击 p:commandbutton(Browse) 并将所选文件路径更新为 inputText 时,我使用 javascript 调用 p:fileUpload。
当我提交表单时,它在 Firefox 和 chrome 中运行良好,但需要按两次才能在 IE 中运行。有谁知道如何解决它?
xhtml页面
<h:form enctype="multipart/form-data" id="formUpload">
<p:messages globalOnly="true" />
<div style="display:none">
<p:fileUpload value="#{testingBean.file}" mode="simple" id="file"/>
</div>
<p:inputText id="txtFile" />
<p:commandButton type="button" value="Browse" onclick="browseAndUpdate()" />
<p:remoteCommand name="browseAndUpdate" update="@form" onstart="document.getElementById('formUpload:file').click()" />
<p:commandButton value="Submit" ajax="false" action="#{testingBean.upload}"/>
</h:form>
<script>
$("input[name='formUpload:file']").change(function() {
$("input[name='formUpload:txtFile']").val($(this).val());
});
</script>
后备豆
private UploadedFile file;
public UploadedFile getFile() {
return file;
}
public void setFile(UploadedFile file) {
this.file = file;
}
public void upload() {
UploadedFile f = this.getFile();
if (null == f) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("null", " null"));
} else {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Succesful", f.getFileName() + " uploaded."));
}
}
编辑:
我指的是 BalusC 的 post commandButton/commandLink/ajax action/listener 方法未调用或输入值未更新,并认为我的问题是他的第 7 点。
浏览器文件后,我尝试使用 p:remoteCommand 更新表单,表单已更新,并且可以通过第一次单击提交上传按钮,但所选文件已消失变为空。
我不知道如何更新 fileUpload viewState..任何人都可以帮忙吗?
除此之外,我参考了另一个 BalusC 的答案h:commandButton/h:commandLink 在第一次点击时不起作用,只在第二次点击时起作用,但我不知道需要把那些 javascript 放在哪里,@BalusC 你能指导我一下吗?多谢..