【发布时间】:2019-01-04 11:43:18
【问题描述】:
这个问题涉及在 Spring Framework 中上传和处理 CSV 数据,使用 Primefaces 上传,以便在数据库中创建新条目。
我已经在 Primefaces 的模板上构建了我的 XHTML 代码。当我单击提交按钮时,应该调用 uploadDevices 方法,但我发现该方法从未输入过。当我删除 ajax="false" 语句时,该方法被调用,但在 Inputstream 处抛出 Nullpointer 异常,因此显然没有收到文件。
有人对如何做有建议吗? ajax 语句做了什么,阻止了方法被调用?
非常感谢任何帮助。
devices.xhtml
<h:form enctype="multipart/form-data" style="margin-bottom:20px">
<p:growl id="messages" showDetail="true" />
<p:fileUpload value="#{fileUploadView.file}" ajax="false" mode="simple" skinSimple="true" allowTypes="/(\.|\/)(csv)$/"/>
<p:commandButton value="Submit" ajax="false" action="#{fileUploadView.uploadDevices()}" disabled="false" />
</h:form>
FileUploadView.java
@Component
@Scope("view")
public class FileUploadView {
private UploadedFile file;
// plus getter and setter
@Autowired
private DeviceService deviceService;
private Device device;
public void uploadDevices() {
final CSVParser parser = new CSVParserBuilder().withSeparator(',').withIgnoreQuotations(true).build();
final BufferedReader fileReader = new BufferedReader(new InputStreamReader(file.getInputstream()));
}
【问题讨论】:
-
如果将其设为 jsf 或 cdi 托管 bean 是否有效?并删除 which ajax=false?
-
我试图将其设为 [at]ManagedBean [at]ViewScoped,但这并没有做任何事情。当我删除 p:commandButton 中的 ajax="false" 时,它会进入 bean 方法,但会在首先提到文件的地方抛出 Nullpointer 异常,所以我想是没有文件
-
@ManagedBean不是 CDI 托管 bean,即@Named(有相应的作用域,注意那些),这种情况下需要 commandButton 上的ajax="false",即上传就可以去掉了。而如果你在jsf开发模式下运行,有什么错误吗?
标签: ajax spring jsf primefaces