У меня есть ap: commandLink, который вызывает метод bean и загружает файл с помощью сервлета Faces.Он работает нормально, пока я не добавлю ap: dialog на моей странице (commandLink не находится внутри него)
<p:commandLink value="#{file}"
actionListener="#{bean.download(file)}"
ajax="false"
immediate="true"
process="@this"/>
Игнорируя это, process="@this"
commandLink пытается обработать переменную fileName в диалоге
<p:dialog header="Edit"
widgetVar="editDialog"
modal="true">
<div>
<p:panelGrid>
<p:row style="height: 50px;">
<p:column>
<p:inputText
value="#{bean.fileName}"
validator="#{fileName.validate}"
requiredMessage="file name is not filled"
validatorMessage="file with this name already exists"/>
</p:column>
</p:row>
</p:panelGrid>
</div>
</p:dialog>
И у меня есть исключение:
javax.el.PropertyNotFoundException:value="#{bean.fileName}": Target Unreachable, 'null' returned null
Я не могу включить ajax, потому что в этом случае файл не будет загружен
Backend:
public void download(InputStream is, String fileName) {
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
context.setResponseContentType(context.getMimeType(fileName));
context.setResponseHeader("Content-Disposition", "attachement;filename=" + fileName);
try (OutputStream os = context.getResponseOutputStream()) {
while(is.available() > 0) {
os.write(is.read());
}
}
catch(IOException ex) {
LOG.error(ex);
}
finally {
FacesContext.getCurrentInstance().responseComplete();
}
}
Как я могу это исправить?Без диалога все отлично работает