gpt4 book ai didi

ajax - 我如何使用

with mode simple and ajax ="true"?

转载 作者:行者123 更新时间:2023-12-04 11:25:22 26 4
gpt4 key购买 nike

我想使用 PrimeFaces 和 ManagedBean 上传文件。我要使用 p:fileUpload模式=“简单”。

XHTML 代码:

    <p:fileUpload id="fileId" mode="simple" value="#{itemBean.upFile}"
fileLimit="1" />
<p:commandButton ajax="true" value="Upload File" update="messagess"
id="save-btn"
actionListener="#{itemBean.fileUpload(itemBean.upFile,itemBean.hiddenFileName)}"
process="@this" oncomplete="showImage()" />

ManagedBean:
public void fileUpload(UploadedFile uploadFile, String hiddenKey) {  
String keyFileName = hiddenKey;

boolean validFile = true;
String expression = "([^\\s]+(\\.(?i)(gif|jpg|jpeg|gif|png|PNG|GIF|JPG|JPEG|bmp))$)";
if((uploadFile == null) ) {
validFile = false;
FacesMessage msg = new FacesMessage("Error! "+ "Please select an image.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
else {
System.out.println("going to file upload"+uploadFile.getFileName()+"---hiddenKey"+keyFileName);
if((!uploadFile.getFileName().matches(expression)) ) {
validFile = false;
FacesMessage msg = new FacesMessage("Error! "+ uploadFile.getFileName() + " is not an image.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
if(uploadFile.getSize() > 1000000) {
validFile = false;
FacesMessage msg = new FacesMessage("Error! "+ uploadFile.getFileName() + " size is too large.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}

if (validFile) {
// Do what you want with the file
try {
//String extn =uploadFile.getFileName().substring(uploadFile.getFileName().lastIndexOf("."));


copyFile(uploadFile.getFileName(), uploadFile.getInputstream());

FacesMessage msg = new FacesMessage("Success! "+ uploadFile.getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
} catch (IOException e) {
e.printStackTrace();
FacesMessage msg = new FacesMessage("Error! "+ uploadFile.getFileName()+ " not uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
}
}

我的问题是,我点击了命令按钮,并且没有调用支持 bean 中的方法。
如果我使用 ajax="false"该方法被调用,但页面被刷新。

我如何使用 ajax="true"<p:fileUpload>一起?

最佳答案

<p:fileUpload mode="simple">不支持ajax。对不起,但这是故事的结局。

如果切换到兼容 ajax 的 <p:fileUpload mode="advanced">真的不是一种选择,那么最好的办法是升级到 JSF 2.2 并使用其新的原生 <h:inputFile>组件代替。它还显示在浏览器的默认外观中,并且能够通过隐藏的 iframe 技巧模拟 ajax 体验。

也可以看看:

  • How to use PrimeFaces p:fileUpload? Listener method is never invoked or UploadedFile is null


  • 无关 对于具体问题,您 fileUpload() 中的这两个论点action方法完全没有必要。只是
    action="#{itemBean.fileUpload}"


    public void fileUpload() {
    // ...
    }

    删除后效果一样好 process="@this"属性。

    关于ajax - 我如何使用 <p :fileUpload> with mode simple and ajax ="true"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19996774/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com