2

我正在使用简单模式的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 你能指导我一下吗?多谢..

4

0 回答 0