XPages:如何使用带有 bean 的 fileUpload 控件作为后端?

XPages: how to use a fileUpload control with a bean as back-end?

我们使用支持 bean 开发了一个表单和字段。使用的上传不起作用,加载页面停止 afterafterRenderResponse,出于某种原因:

<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>

我有 beans 表单和字段,具有必要的 getter 和 setter 功能。

错误发生在 XPages 的某处,而不是在我的代码中。如果我将上传控件注释掉,其他一切都有效。有人能解释一下为什么我总是得到空指针异常吗?谢谢!!

EDIT 添加了一些说明,尤其是错误发生在 afterRenderResponse 步骤之后。我打印了每个自定义控件中所有事件的简单跟踪,无论是否使用上传控件,跟踪都没有区别,它们是相同的,包括最后一个 afterRenderresponse 事件。

/* 370 */     Object localObject1 = getForm(paramUIComponent);
/* 371 */     String str3 = ((UIForm)localObject1).getClientId(paramFacesContext);

JD-Eclipse is very useful tool, works with Domino Designer. Works perfectly with Java debugging,包括断点。

要找到 class,请使用此提示:

我的猜测:文件上传控件缺少对表单的引用。可能组件在窗体之外,或者窗体渲染被禁用。