我正在使用带有简单模式的primefacas fileUpload(由于某些其他原因,不使用高级模式)。我使用style =“display:none”使fileUpload“隐藏”,然后使用commandbutton添加一个inputText来表示fileUpload(因为通过这种方式我可以更容易地进行设计)。
当用户点击p:commandbutton(浏览)时,我使用javascript调用p:fileUpload
并将所选文件路径更新为inputText。
当我提交表单时,它在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的帖子commandButton/commandLink/ajax action/listener method not invoked or input value not updated并且相信我的问题是他的观点7。
浏览器文件后,我尝试使用p:remoteCommand更新表单,表单更新,上传按钮能够通过第一次单击提交,但所选文件变为空。
我不知道如何更新fileUpload viewState.anyone可以帮忙吗?
除此之外,我引用了另一个BalusC的回答h:commandButton/h:commandLink does not work on first click, works only on second click,但我不知道需要将这些javascript放到哪里,@ BalusC你可以指导我一下吗?非常感谢..