file-upload - XPages:如何使用带有 bean 作为后端的 fileUpload 控件?
问题描述
我们使用支持 bean 开发了一个表单和字段。由于某种原因,使用的上传不起作用,加载页面在 afterRenderResponse之后停止:
<xp:fileUpload value="#{field.fileUpload}" id="fileUpload1">
<xp:this.attrs>
<xp:attr name="alias" value="#{form.name}.#{field.fieldName}"></xp:attr>
</xp:this.attrs>
</xp:fileUpload>
bean中的代码:
private UploadedFile uploadedFile= null;
public FieldData(Field field) {
this.field = field;
this.value = field.getFieldValue();
System.err.print("new FieldData: " + field.getFieldName());
}
public UploadedFile getFileUpload() {
System.err.print("getFileUpload");
return uploadedFile;
}
public void setFileUpload(UploadedFile to) {
System.err.print("setFileUpload " + to);
this.uploadedFile = to;
}
我不断收到的错误:
java.lang.NullPointerException
at com.ibm.xsp.renderkit.html_extended.FileuploadRendererEx.encodeEnd(FileuploadRendererEx.java:371)
at com.ibm.xsp.renderkit.ReadOnlyAdapterRenderer.encodeEnd(ReadOnlyAdapterRenderer.java:180)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:1005)
at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:857)
和更多的行。
其他类型的字段表现得很好,除了这个。举个例子,一个文本字段被定义为:
<xp:inputText type="text" value="#{field.fieldValue}" id="inputText1">
<xp:this.attrs>
<xp:attr name="required" value="true" rendered="#{javascript:field.isRequired()}"></xp:attr>
<xp:attr name="alias" value="#{form.name}.#{field.fieldName}"></xp:attr>
</xp:this.attrs>
</xp:inputText>
我有 bean 表单和字段,以及必要的 getter 和 setter 函数。
该错误发生在 XPages 中的某处,而不是我的代码中。如果我将上传控件注释掉,其他一切都正常。有人可以解释一下为什么我总是得到空指针异常吗?谢谢!!
编辑添加了一些说明,尤其是在 afterRenderResponse 步骤之后发生错误的事实。我打印了每个自定义控件中所有事件的简单跟踪,当我使用上传控件时,跟踪没有区别,它们是相同的,包括最后一个 afterRenderresponse 事件。
解决方案
/* 370 */ Object localObject1 = getForm(paramUIComponent);
/* 371 */ String str3 = ((UIForm)localObject1).getClientId(paramFacesContext);
JD-Eclipse是非常有用的工具,可与 Domino Designer 配合使用。完美配合 Java调试,包括断点。
要定位该类,请使用以下提示:Assistant locating jar contains Domino/XPages classes
我的猜测:文件上传控件缺少对表单的引用。可能组件在表单之外,或者表单呈现被禁用。
推荐阅读
- javascript - 在设置值之后可靠地运行代理陷阱
- r - 在数据框中执行多个 pivot_longer
- java - IntelliJ 错误:java.lang.OutOfMemoryError:超出 GC 开销限制
- android - Android:使用 viewModelscope 和 withContext 时不可能出现 NullPointerException
- python-3.x - 如何使用 Gekko 释放变量
- c++ - 如何为每个活动线程块处理重用全局内存的唯一部分?
- javascript - chrome 上的语音合成器只播放前 200 个字符
- spring-boot - 在 JBoss EAP 7.1.0 中部署 Spring Boot 应用程序时创建名为“undertowServletWebServerFactory”的 bean 时出错
- angular - Angular ng-select:GroupBy 数组 ng-select
- libvlc - 如何在 python-vlc 中获取比特率、采样率和每个样本的位数